繁体   English   中英

PHP 将值推入关联数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM