我如何用唯一键递归合并数组?

问题描述 投票:0回答:2

我这样创建数组:

foreach ($array as $key => $value) {
          $array1[$value->getUuid()][$value->getFields()->getName()] = $value->getContent();
        }

结果为array1:

array:2 [▼
  "d8ab80f4f6" => array:16 [▶]
  9087785727 => array:16 [▶]
]

我以另一种不同的方式创建另一个数组,array2:

array:2 [▼
  "d8ab80f4f6" => array:3 [▶]
  9087785727 => array:3 [▶]
]

现在我要合并这些数组:

$output = array_merge_recursive($array1,$array2);

输出为:

array:3 [▼
  "d8ab80f4f6" => array:19 [▶]
  0 => array:3 [▶]
  1 => array:16 [▶]
]

但是我希望输出是:

array:3 [▼
  "d8ab80f4f6" => array:19 [▶]
  "9087785727" => array:19 [▶]
]
php arrays merge associative-array
2个回答
1
投票

[array_mergearray_merge_recursive对字符串键和数字键的处理不同:

如果输入数组具有相同的字符串键,则这些键的值将合并到一个数组中,并且这是递归完成的,因此,如果值之一是数组本身,则该函数会将其与另一个数组中的相应条目。但是,如果数组具有相同的数字键,则后面的值将不会覆盖原始值,而是将其附加。

这就是这里正在发生的事情。键9087785727是数字,因此不会合并这些条目。

所以您需要编写自己的循环。

$output = [];
foreach ($array1 as $key => $value) {
    $output[$key] = array_merge($value, $array2[$key]);
}

DEMO


0
投票

您可以将下一个foreach loopreference &一起使用:

foreach($ar1 as $key=>&$subar){
    $subar = array_merge($subar,$ar2[$key]); 
}

Demo

© www.soinside.com 2019 - 2024. All rights reserved.