PHP - 用另一个不相同的数组替换数组的值

时间:2017-03-04 07:01:06

标签: php arrays

有没有办法可以用另一个非相同数组的值替换一个数组的值,并获得第一个(更新的)数组的结果? 例如:

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

不是解决方案

5 个答案:

答案 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_replacearray_keys_intersect一起使用:

$result = array_intersect_key(array_replace($arr1, $arr2), $arr1);

这是working demo

然而,简单地循环遍历第一个数组并自行替换值在这种情况下更为理想。