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));