合并共享相同键的数组的值

时间:2020-11-06 15:22:36

标签: php arrays

我寻找了一段时间,但找不到类似的问题。

我有一个像这样的数组:

$array = [
"555" => ['Juan', 'Gomez'],
"555" => ['Foo', 'Bar'],
"556" => ['Test', 'Test']
];

我想合并共享相同键的值,所以当我内爆时,它会打印出这样的内容:

"555" => ['Juan', 'Gomez', 'Foo', 'Bar']
"556" => ['Test', 'Test'];

似乎函数array_merge_recursive完成了我想要的。 它将数组分组

$array1 = array('"555"' => array('Juan', 'Gomez'));
$array2 = array('"555"' => array('Foo', 'Bar'));

进入

array_merge_recursive($array1, $array2);

Output:

Array
(
    ["555"] => Array
        (
            [0] => Juan
            [1] => Gomez
            [2] => Foo
            [3] => Bar
        )

)

但是我要动态地从表中加载值,所以我不能命名每一行,这太疯狂了,有没有一种方法可以使美国仅用一个数组起作用?

我尝试过

$array[] = array('"555"' => array('Juan', 'Gomez'));
$array[] = array('"555"' => array('Foo', 'Bar'));

and array_merge_recursive($array);

但是它并没有完全将它们合并为一个。

1 个答案:

答案 0 :(得分:0)

您不能“拥有这样的数组”,因为数组键是唯一的。

因此,您需要返回到创建该数组的位置,并在那里检查该键是否已经存在(如果存在),合并值。

while ($doStuff) {

  // $myKey = '555';


  // Create an empty array for that key
  if (!isset($myArray[$myKey])) {
    $myArray[$myKey] = [];
  }

  // $myListOfNames = ['Juan', 'Gomez']
  // Merge the names with the array for that key
  $myArray[$myKey] = array_merge($myArray[$myKey], $myListOfNames);

  // Or if you just want to add a single value to the list
  $myArray[$myKey][] = $myName;
  

}