php替换和2个嵌套数组的interesction

时间:2015-10-23 14:11:38

标签: php arrays

我们假设我们有一个嵌套的array1:

 $array1=
 [function_maps =>
      [subid=>1,
       transaction=>2
      ]
 ]

和array2看起来像这样:

 $array2=
 [function_maps =>
      [subid=>4,
       purchace=40EUR
      ]
 ]

所以我希望得到一个像这样的结果数组:

$array3=
 [function_maps =>
      [subid=>4,
       transaction=>2,
       purchace=40EUR
      ]
 ]

如您所见,array1和array2中存在的值,我们更喜欢array2值。如果没有交集,则两个值都将被带入新数组。

我怎样才能达到这个目标?知道数组可以深入(嵌套数组,最多可达3个级别)。

使用解决方案进行编辑:

来自IRC聊天的人给了我解决方案,这很容易解决这个问题:

http://php.net/manual/en/function.array-replace-recursive.php

2 个答案:

答案 0 :(得分:1)

您需要一个递归解决方案。尝试以下功能:

function replace_recursive(array &$array1, &$array2 = null) {
    $merged = $array1;

    if (is_array($array2)) {
        foreach ($array2 as $key => $val) {
            if (is_array($array2[$key])) {
                if (is_array($merged[$key])) {
                  $merged[$key] = replace_recursive($merged[$key], $array2[$key]);
                } else {
                  $merged[$key] = $array2[$key];
                }
            } else {
                $merged[$key] = $val;
            }
        }
    }
    return $merged;
}

示例:

$array1 = ['function_maps' => ['subid' => 1, 'transaction' => 2]];
$array2 = ['function_maps' => ['subid' => 4, 'purchase' => '40 EUR']];
$result = replace_recursive($array1, $array2);
print_r($result);

输出:

Array
(
    [function_maps] => Array
        (
            [subid] => 4
            [transaction] => 2
            [purchase] => 40 EUR
        )

)

Demo

答案 1 :(得分:0)

来自IRC聊天的人给了我解决方案,这很容易解决这个问题:

http://php.net/manual/en/function.array-replace-recursive.php