我无法在任何地方找到答案。
foreach ($multiarr as $array) {
foreach ($array as $key=>$val) {
$newarray[$key] = $val;
}
}
说$key
有重复的名称,所以当我尝试推入$newarray
时,实际上看起来像这样:
$newarray['Fruit'] = 'Apples';
$newarray['Fruit'] = 'Bananas';
$newarray['Fruit'] = 'Oranges';
问题是,上面的示例只是替换旧值,而不是推入它。
是否可以推送这样的值?
答案 0 :(得分:12)
是的,请注意新的方括号:
foreach ($multiarr as $array) {
foreach ($array as $key=>$val) {
$newarray[$key][] = $val;
}
}
你也可以使用array_push()
,引入一些开销,但我大部分时间都会坚持使用速记。
答案 1 :(得分:-1)
我将提供替代moonwave99的答案,并解释它的细微差别。
以下技术将关联数组的索引数组解压缩,并将每个子数组作为$ne
的单独参数,以执行合并“魔术”。
代码:(Demo)
$nin
在递归合并时,如果各个键只有一个值,则不使用子数组;如果一个键有多个值,则使用子数组。
通过取消注释array_merge_recursive()
元素来查看此操作。
p.s。如果您知道您仅将数据作为目标,并且知道要作为目标的键,那么$multiarr = [
['Fruit' => 'Apples'],
['Fruit' => 'Bananas'],
['Fruit' => 'Oranges'],
['Veg' => 'Carrot'],
//['Veg' => 'Leek'],
];
var_export(
array_merge_recursive(...$multiarr)
);
将是明智的选择。
代码:(Demo)
Leek