根据键的值合并数组

ken*_*in9 6 php arrays collections array-merge laravel

我有两个具有id键的数组数组,我想根据该数组的键和键值将数据合并在一起.数据看起来像:

    $color = [
        ['id' => 1, 'color' => 'red'],
        ['id' => 2, 'color' => 'green'],
        ['id' => 3, 'color' => 'blue'],
    ];

    $size = [
        ['id' => 1, 'size' => 'SM'],
        ['id' => 2, 'size' => 'XL'],
        ['id' => 3, 'size' => 'MD'],
        ['id' => 4, 'size' => 'LG'],
    ];

    $combined = [
        ['id' => 1, 'color' => 'red', 'size' => 'SM'],
        ['id' => 2, 'color' => 'green', 'size' => 'XL'],
        ['id' => 3, 'color' => 'blue', 'size' => 'MD'],
        ['id' => 4, 'size' => 'LG'],
    ];
Run Code Online (Sandbox Code Playgroud)

是否有一个特别有效的功能或技巧来处理这样的事情?或者我应该循环遍历一个数组的元素并将内容推送到另一个数组?

我也使用Laravel,数据是一个雄辩的查询的结果,所以我也可以利用这些集合,如果它会使代码更清晰.

Man*_*ngh 7

使用array_replace_recursive函数可以轻松快捷地完成

array_replace_recursive($color, $size)
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 1

您可以array_replace_recursive根据具体情况使用合并数组。

$color = array(
    array('id' => 1, 'color' => 'red'),
    array('id' => 2, 'color' => 'green'),
    array('id' => 3, 'color' => 'blue'),
);

$size = array(
    array('id' => 1, 'size' => 'SM'),
    array('id' => 2, 'size' => 'XL'),
    array('id' => 3, 'size' => 'MD'),
    array('id' => 4, 'size' => 'LG'),
);

$merged = array_replace_recursive($color, $size);
Run Code Online (Sandbox Code Playgroud)

输出:

array(4) {
  [0]=>
  array(3) {
    ["id"]=>
    int(1)
    ["color"]=>
    string(3) "red"
    ["size"]=>
    string(2) "SM"
  }
  [1]=>
  array(3) {
    ["id"]=>
    int(2)
    ["color"]=>
    string(5) "green"
    ["size"]=>
    string(2) "XL"
  }
  [2]=>
  array(3) {
    ["id"]=>
    int(3)
    ["color"]=>
    string(4) "blue"
    ["size"]=>
    string(2) "MD"
  }
  [3]=>
  array(2) {
    ["id"]=>
    int(4)
    ["size"]=>
    string(2) "LG"
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:我使用传统的数组布局,因为我的 PHP 版本尚不支持新的数组布局:)

第二个选择

您也可以使用array_map. 这将允许您通过一些调整来添加任意数量的数组。

$merged = array_map(function ($c, $s) {
    return array_merge($c, $s);
}, $color, $size);

var_dump($merged); // See output above
Run Code Online (Sandbox Code Playgroud)