尝试合并两个多维数组并保留键

时间:2016-08-08 20:16:37

标签: php arrays merge sum

我需要合并两个“三维”数组但我的问题是,当第一个数组键与另一个数组相同时,结果只是......不可取。

这里有一个例子:

$a = array(
        1=>array(
                -1 => array(-1=>'a: 1 -1 -1',0=>'a: 1 -1 0',1=>'a: 1 -1 1'),
                0 =>  array(-1=>'a: 1 0 -1', 0=>'a: 1 0 0', 1=>'a: 1 0 1'),
                1 =>  array(-1=>'a: 1 1 -1', 0=>'a: 1 1 0', 1=>'a: 1 1 1')
        )
);

$b = array(
        1=>array(
                1 => array(-1=>'b: 1 1 -1',0=>'b: 1 1 0',1=>'b: 1 1 1'),
                2 => array(-1=>'b: 1 2 -1',0=>'b: 1 2 0',1=>'b: 1 2 1'),
                3 => array(-1=>'b: 1 3 -1',0=>'b: 1 3 0',1=>'b: 1 3 1')
        )
);

做$ a + $ b的结果是:

Array
(
    [1] => Array
        (
            [-1] => Array
                (
                    [-1] => a: 1 -1 -1
                    [0] => a: 1 -1 0
                    [1] => a: 1 -1 1
                )

            [0] => Array
                (
                    [-1] => a: 1 0 -1
                    [0] => a: 1 0 0
                    [1] => a: 1 0 1
                )

            [1] => Array
                (
                    [-1] => a: 1 1 -1
                    [0] => a: 1 1 0
                    [1] => a: 1 1 1
                )

        )

)

我需要对PHP说,“嘿,'b'数组中的键[1] [2] [X]和[1] [3] [X]不在'a'数组中,所以将它们合并到结果中。“

当所有三个键都相同时,我甚至不在乎PHP会采用哪一个。键的值是字符串,所以我也不想对这些值求和。我需要保留密钥,这样一个简单的array_merge就没用了。也许我需要将它与其他功能结合起来,但我看不出哪一个。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以尝试array_replace_recursive功能:

array_replace_recursive($a, $b);

输出如下:

Array
(
    [1] => Array
        (
            [-1] => Array
                (
                    [-1] => a: 1 -1 -1
                    [0] => a: 1 -1 0
                    [1] => a: 1 -1 1
                )
            [0] => Array
                (
                    [-1] => a: 1 0 -1
                    [0] => a: 1 0 0
                    [1] => a: 1 0 1
                )
            [1] => Array
                (
                    [-1] => b: 1 1 -1
                    [0] => b: 1 1 0
                    [1] => b: 1 1 1
                )
            [2] => Array
                (
                    [-1] => b: 1 2 -1
                    [0] => b: 1 2 0
                    [1] => b: 1 2 1
                )
            [3] => Array
                (
                    [-1] => b: 1 3 -1
                    [0] => b: 1 3 0
                    [1] => b: 1 3 1
                )
        )
)

这会将匹配键的所有条目替换为$b中的值,因此请仔细检查这是否是您想要的结果(否则反转$a$b