我需要合并两个“三维”数组但我的问题是,当第一个数组键与另一个数组相同时,结果只是......不可取。
这里有一个例子:
$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就没用了。也许我需要将它与其他功能结合起来,但我看不出哪一个。
提前致谢。
答案 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
)