用其他数组中的值替换数组中的元素

时间:2017-12-13 10:24:07

标签: php

我有主阵列:

$main = array(
    'city' => 'London',
    'street' => 'Hyde Park',
    'name' => 'John'
);

例子:

$example1 = array(
    'city',
    'name'
);

$example2 = array(
    'city',
    'street',
    'name'
);

我想收到(通过单一数组):

$example1 = array(
    'London',
    'John'
);

$example2 = array(
    'London',
    'Hyde Park',
    'John'
);

更好的方法是:

        function newArray($mainArray, $array) {
            $new_array = [];
            foreach ($mainArray as $key => $main) {
                if (in_array($main, $array)) {
                    $new_array = $key;
                }
            }

            return $new_array;
        }

也许我可以使用array_map或array_walk,但是怎么样?

1 个答案:

答案 0 :(得分:0)

如你所知,array_map对此有好处。

$example1Mapped = array_map(function($key) use ($main) {
    return array_key_exists($key, $main) ? $main[$key] : $key;
}, $example1);

$example2Mapped = array_map(function($key) use ($main) {
    return array_key_exists($key, $main) ? $main[$key] : $key;
}, $example2);

另一种方法可能是使用array_fliparray_intersect_key

的组合
$example1Mapped = array_intersect_key($main, array_flip($example1));

array_flip会将数组的值转换为键,将其键转换为值。因此$example1 = ['city', 'name'];将变为$example1 = ['city' => 0, 'name' => 1];

array_intersect_key然后会移除$main中的所有值,这些值在翻转的$example1中不存在。

然而,此解决方案不会保持值的顺序,而是强制执行$main数组的顺序。

如果示例数组中存在值,而$main数组中的值不存在,则值将保留在array_map方法中,而在第二种方法中将删除它们。