【问题标题】:PHP push values into associative arrayPHP 将值推入关联数组
【发布时间】:2012-09-07 22:26:39
【问题描述】:

我在任何地方都找不到答案。

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

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

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

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

是否可以像这样推送值?

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    是的,注意新的一对方括号:

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

    您也可以使用array_push(),这会带来一些开销,但我大部分时间都会坚持使用简写。

    【讨论】:

      【解决方案2】:

      我将提供一个替代 moonwave99 的答案,并解释它是如何微妙地不同的。

      以下技术将关联数组的索引数组解包,并将每个子数组作为单独的参数提供给 array_merge_recursive(),后者执行合并“魔术”。

      代码:(Demo)

      $multiarr = [
          ['Fruit' => 'Apples'],
          ['Fruit' => 'Bananas'],
          ['Fruit' => 'Oranges'],
          ['Veg'   => 'Carrot'],
          //['Veg'   => 'Leek'],
      ];
      
      var_export(
          array_merge_recursive(...$multiarr)
      );
      

      当您递归合并时,如果相应的键只有一个值,则不使用子数组,如果键有多个值,则使用子数组。

      取消注释Leek 元素可查看此操作。


      附言如果您知道您只针对单列数据并且您知道您所针对的键,那么array_column() 将是一个明智的选择。

      代码:(Demo)

      var_export(
          ['Fruit' => array_column($multiarr, 'Fruit')]
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多