有没有办法可以用另一个非相同数组的值替换一个数组的值,并获得第一个(更新的)数组的结果? 例如:
$arr1 = Array
(
[key3] => var3
[key4] => var4
)
$arr2 = Array
(
[key1] => var1
[key2] => var2
[key3] => new_var
[key4] => new_var
[key5] => var5
[key6] => var6
)
我想得到:
$arr_result = Array
(
[key3] => new_var
[key4] => new_var
)
$arr_result = array_merge($arr1, $arr2)
不是解决方案
答案 0 :(得分:2)
如果第二个数组具有相同的键,则可以遍历第一个数组以替换第二个数组的值。您可以使用foreach或array_walk()
foreach($array1 as $k => &$v)
{
$v = isset($array2[$k]) ? $array2[$k] : $v;
}
答案 1 :(得分:2)
您可以使用array_intersect_key:
返回一个关联数组,其中包含
first argument
的所有条目,这些条目具有所有参数中都存在的键。
$arr_result = array_intersect_key($array2, $array1);
答案 2 :(得分:0)
foreach($arr1 as $key => $value) {
if(array_key_exists($key, $arr2))
$arr1[$key] = $arr2[$key];
}
我喜欢这种方法,因为代码简洁,高效,而且功能可以直接从内置的PHP函数中读取。
答案 3 :(得分:0)
基于Jomoos anwer,我试过这个并且它工作正常:
$arr_res = array_intersect_key($array2, $array1);
return array_merge($array1, $arr_res);
答案 4 :(得分:0)
为了实现这一目标,您可以将array_replace
与array_keys_intersect
一起使用:
$result = array_intersect_key(array_replace($arr1, $arr2), $arr1);
这是working demo。
然而,简单地循环遍历第一个数组并自行替换值在这种情况下更为理想。