Php 如何使用唯一键递归合并数组?
我创建的数组如下所示:Php 如何使用唯一键递归合并数组?,php,arrays,merge,associative-array,Php,Arrays,Merge,Associative Array,我创建的数组如下所示: foreach ($array as $key => $value) { $array1[$value->getUuid()][$value->getFields()->getName()] = $value->getContent(); } 结果是1: array:2 [▼ "d8ab80f4f6" => array:16 [▶] 9087785727 => array:16 [▶]
foreach ($array as $key => $value) {
$array1[$value->getUuid()][$value->getFields()->getName()] = $value->getContent();
}
结果是1:
array:2 [▼
"d8ab80f4f6" => array:16 [▶]
9087785727 => array:16 [▶]
]
我以稍微不同的方式创建了另一个数组,array2:
array:2 [▼
"d8ab80f4f6" => array:3 [▶]
9087785727 => array:3 [▶]
]
现在我要合并这些阵列:
$output = array_merge_recursive($array1,$array2);
输出为:
array:3 [▼
"d8ab80f4f6" => array:19 [▶]
0 => array:3 [▶]
1 => array:16 [▶]
]
但我预计结果是:
array:3 [▼
"d8ab80f4f6" => array:19 [▶]
"9087785727" => array:19 [▶]
]
您可以将next
foreach循环
与一起使用:
foreach($ar1 as $key=>&$subar){
$subar = array_merge($subar,$ar2[$key]);
}
array\u merge
和array\u merge\u recursive
对待字符串键与数字键不同:
如果输入数组具有相同的字符串键,那么这些键的值将合并到一个数组中,并且这是递归完成的,因此如果其中一个值是数组本身,则函数也会将其与另一个数组中的相应项合并。但是,如果数组具有相同的数字键,则后面的值不会覆盖原始值,而是会追加
这就是这里发生的事情。键9087785727
为数字,因此不会合并这些条目
因此,您需要编写自己的循环
$output = [];
foreach ($array1 as $key => $value) {
$output[$key] = array_merge($value, $array2[$key]);
}
我用我的代码尝试了这个解决方案,但输出只是其中一个的内容array@fala不可能。您是否使用了&
?,作为well@AksenP您没有对关联数组调用array\u merge()
。@Barmar,您too@AksenP这就是重点。当任何键都是数字时,即使它们不像普通索引数组那样是连续的,它也不能按预期工作。