首页 > 解决方案 > Merge/combine 2 arrays with a common key

问题描述

I have 2 arrays

$firstarray = [ ['name'='a', 'price'=1],['name'='b', 'price'=2],... ]
$secondarray = [ ['name'='b', 'year'=1999],['name'='a', 'year'=2000],... ]

how do I combine the together based on the name to result

$resultingarry = [ ['name'='a', 'year'=2000, price'=1],....] 

I tried array_merge_recursive and array_merge_recursive_distinct, but these are dependent on the key so the order will always be off.

Thanks in advance

标签: phparrayslaravel

解决方案


我不知道可以做到这一点的 PHP 函数(也不是 laravel 函数)。虽然有一些循环,但它非常简单:

$firstarray = [ ['name'=>'a', 'price'=>1],['name'=>'b', 'price'=>2],];
$secondarray = [ ['name'=>'b', 'year'=>1999],['name'=>'a', 'year'=>2000],];

$resultingarray = [];

foreach ($firstarray as $entry) {
    // find entry with same "name" in second array
    foreach ($secondarray as $secondentry) {
        if ($secondentry['name'] == $entry['name']) {
            $resultingarray[] = array_merge($entry, $secondentry);
            continue 2;
        }
    }
}

var_dump($resultingarray);

结果是:

array(2) {
  [0]=>
  array(3) {
    ["name"]=>
    string(1) "a"
    ["price"]=>
    int(1)
    ["year"]=>
    int(2000)
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(1) "b"
    ["price"]=>
    int(2)
    ["year"]=>
    int(1999)
  }
}

请注意,这只会合并第一个“匹配”(第二个数组中的条目与name第一个数组中的值相同)。


推荐阅读