PHP将值推送到关联数组中

时间:2012-09-07 22:26:39

标签: php arrays

我无法在任何地方找到答案。

foreach ($multiarr as $array) {
   foreach ($array as $key=>$val) {
      $newarray[$key] = $val;
   }
}

$key有重复的名称,所以当我尝试推入$newarray时,实际上看起来像这样:

$newarray['Fruit'] = 'Apples';
$newarray['Fruit'] = 'Bananas';
$newarray['Fruit'] = 'Oranges';

问题是,上面的示例只是替换旧值,而不是推入它。

是否可以推送这样的值?

2 个答案:

答案 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