PHP - 合并和合并数组

PHP - Merge and Combine Array

我有3个数组如下:

数组 1:

array 1: [
  0 => array[
    "product_id" => "a"
    "quantity_1" => "1"
  ]
  1 => array[
    "product_id" => "b"
    "quantity_1" => "2"
  ]
  2 => array[
    "product_id" => "c"
    "quantity_1" => "1"
  ]
]

数组 2:

array 2: [
  0 => array[
    "product_id" => "a"
    "quantity_2" => "1"
  ]
  1 => array[
    "product_id" => "d"
    "quantity_2" => "2"
  ]
]

我想要的结果是:

array 3: [
  0 => array[
    "product_id" => "a"
    "quantity_1" => "1"
    "quantity_2" => "1"
  ]
  1 => array[
    "product_id" => "b"
    "quantity_1" => "2"
  ]
  2 => array[
    "product_id" => "c"
    "quantity_1" => "1"
  ]
  3 => array[
    "product_id" => "d"
    "quantity_2" => "2"
  ]
]

我尝试使用 array_combine() 函数,但结果不如预期

非常感谢任何帮助!非常感谢!

如果您愿意将 product_id 作为密钥,那么您可以这样做:

$a = [
  0 => [
    "product_id" => "a",
    "quantity_1" => "1"
  ],
  1 => [
    "product_id" => "b",
    "quantity_1" => "2"
  ],
  2 => [
    "product_id" => "c",
    "quantity_1" => "1"
  ]
];

$b =  [
  0 => [
    "product_id" => "a",
    "quantity_2" => "1"
  ],
  1 => [
    "product_id" => "d",
    "quantity_2" => "2"
  ]
];

 print_r(
      array_replace_recursive(
             array_column($a, null, 'product_id'),
             array_column($b, null, 'product_id')
      )
 );

输出

Array
(
    [a] => Array
        (
            [product_id] => a
            [quantity_1] => 1
            [quantity_2] => 1
        )

    [b] => Array
        (
            [product_id] => b
            [quantity_1] => 2
        )

    [c] => Array
        (
            [product_id] => c
            [quantity_1] => 1
        )

    [d] => Array
        (
            [product_id] => d
            [quantity_2] => 2
        )

)

Sandbox

您始终可以使用 array_values 从结果中删除密钥,如下所示:

 print_r(
    array_values(
      array_replace_recursive(
             array_column($a, null, 'product_id'),
             array_column($b, null, 'product_id')
      )
    )
 );

-注意- product_ids 在每个数组中必须是唯一的,这样才能工作。否则你可以简单地用一个 foreach 循环来完成。

$c = [];

foreach(array_merge($a,$b) as $v){
    $k = $v['product_id'];
    if(!isset($c[$k])){
        $c[$k] = $v;
    }else{
        $c[$k] = array_merge($c[$k],$v);
    }
}

print_r($c);

Sandbox

我会 post 输出,但它是一样的 :) - 这就是重点。此外,我更喜欢尽可能多地引用键。它可以使维护代码更容易一些。