[英]PHP how to push an associative ARRAY (not its values) to another array?
[英]PHP push values into associative array
我在任何地方都找不到答案。
foreach ($multiarr as $array) {
foreach ($array as $key=>$val) {
$newarray[$key] = $val;
}
}
说$key
有重复的名字,所以当我试图推入$newarray
它实际上是这样的:
$newarray['Fruit'] = 'Apples';
$newarray['Fruit'] = 'Bananas';
$newarray['Fruit'] = 'Oranges';
问题是,上面的例子只是替换了旧值,而不是推入它。
是否可以推送这样的值?
是的,注意新的一对方括号:
foreach ($multiarr as $array) {
foreach ($array as $key=>$val) {
$newarray[$key][] = $val;
}
}
您也可以使用array_push()
,这会带来一些开销,但我大部分时间都会坚持使用速记。
我将提供moonwave99 答案的替代方案,并解释它有何微妙的不同。
以下技术解包关联数组的索引数组,并将每个子数组作为单独的参数提供给array_merge_recursive()
执行合并“魔术”。
代码:(演示)
$multiarr = [
['Fruit' => 'Apples'],
['Fruit' => 'Bananas'],
['Fruit' => 'Oranges'],
['Veg' => 'Carrot'],
//['Veg' => 'Leek'],
];
var_export(
array_merge_recursive(...$multiarr)
);
当您递归合并时,如果相应键只有一个值,则不使用子数组,如果键有多个值,则使用子数组。
通过取消对Leek
元素的注释来查看此操作。
ps 如果您知道您只针对单列数据并且您知道您要针对的键,那么array_column()
将是一个明智的选择。
代码:(演示)
var_export(
['Fruit' => array_column($multiarr, 'Fruit')]
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.