$a = array('matches' =>
array(
'5' => array('weight' => 6),
'15' => array('weight' => 6),
)
);
$b = array('matches' =>
array(
'25' => array('weight' => 6),
'35' => array('weight' => 6),
)
);
$merge = array_merge($a, $b);
print_r($merge);
此脚本的结果是
Array
(
[matches] => Array
(
[25] => Array
(
[weight] => 6
)
[35] => Array
(
[weight] => 6
)
)
)
但为什么?
我希望结果如下:
Array
(
[matches] => Array
(
[5] => Array
(
[weight] => 6
)
[15] => Array
(
[weight] => 6
)
[25] => Array
(
[weight] => 6
)
[35] => Array
(
[weight] => 6
)
)
)
答案 0 :(得分:9)
因为第一个数组中的键'matches'
被第二个数组中的相同键覆盖。你需要这样做:
$merge = array('matches' => array());
$a = array(
'matches' => array(
'5' => array('weight' => 6),
'15' => array('weight' => 6)
)
);
$b = array(
'matches' => array(
'25' => array('weight' => 6),
'35' => array('weight' => 6)
)
);
$merge['matches'] = array_merge($a['matches'], $b['matches']);
print_r($merge);
<强>更新强>
为了保留数字键,你必须这样做:
$merge['matches'] = $a['matches'] + $b['matches'];
如果像这样使用数组union运算符,请记住以下来自php.net:
将保留第一个数组中的键。如果两个数组中都存在数组键,则将使用第一个数组中的元素,并忽略第二个数组中的匹配键元素。
答案 1 :(得分:4)
尝试使用array_merge_recursive
代替array_merge
。
答案 2 :(得分:0)
您正在合并阵列的顶级。 array_merge()
函数看到它们都包含“matches”元素,因此它将选择一个作为合并结果。
如果您希望它更深入地扫描,则需要在阵列中的下一级运行array_merge()。在这种情况下,它相对简单,因为每个数组的顶层只有一个元素,所以你只需要一行 - 就像这样:
$merge['matches'] = array_merge($a['matches'], $b['matches']);
更复杂的数组结构需要更多的工作。
希望有所帮助。
答案 3 :(得分:0)
尝试:
$merge = array();
$merge['matches'] = array_merge($a['matches'], $b['matches']);
你的问题是你将顶级$ a数组与$ b合并,并且这两个都有一个“匹配”索引,所以它接受$ b的那个元素的版本。您可以通过显式合并该索引的数组($ a ['matches']与$ b ['matches'])并将其分配给合并数组($ merge ['matches'])来解决这个问题,这将导致预期的行为。
或者array_merge_recursive会做你想做的事。
答案 4 :(得分:-1)
嗯,你可以手动完成:
$mergedArray = array();
foreach($a as $key => $value)
{
$mergedArray[$key] = $value;
}
foreach($b as $key => $value)
{
$mergedArray[$key] = $value;
}