Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用其他数组中的值替换数组中的元素_Php - Fatal编程技术网

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

Php 用其他数组中的值替换数组中的元素,php,Php,我有一个主阵列: $main = array( 'city' => 'London', 'street' => 'Hyde Park', 'name' => 'John' ); 例如: $example1 = array( 'city', 'name' ); $example2 = array( 'city', 'street', 'name' ); 我希望(通过单个阵列)接收: 这是比以下更好的方法:

我有一个主阵列:

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

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

$example2 = array(
    'city',
    'street',
    'name'
);
我希望(通过单个阵列)接收:

这是比以下更好的方法:

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

            return $new_array;
        }
?


也许我可以使用数组映射或数组行走,但是如何使用呢

正如您所建议的,
array\u 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\u flip
array\u intersect\u key

$example1Mapped = array_intersect_key($main, array_flip($example1));
array\u flip
将数组的值转换为键,并将其键转换为值。所以
$example1=['city','name']将变成
$example1=['city'=>0,'name'=>1]

array\u intersect\u key
然后将删除
$main
中的所有值,这些键在翻转的
$example1
中不存在

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


如果示例数组中有值在
$main
数组中不作为键出现,则这些值将保留在
数组映射
方法中,而在第二种方法中它们将被删除。

您确定您的代码有效吗?它看起来像是给数组分配了一个字符串,并且在每次迭代中都会被覆盖。在这里使用in_数组也是低效的。但如果不是这样的话,在数组中循环的前提并没有错,在一行中更“优雅”地进行循环并不会提高效率。
$example1Mapped = array_intersect_key($main, array_flip($example1));