PHP-合并和合并数组

时间:2019-07-31 02:34:38

标签: php array-merge

我有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()函数,但结果与预期不符

任何帮助,不胜感激!非常感谢!

1 个答案:

答案 0 :(得分:5)

如果您愿意将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_id在每个数组中必须是唯一的,才能正常工作。否则,您可以简单地通过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

我会发布输出,但是它是相同的:)-这就是重点。另外,我更喜欢参考一些键。它可以使代码维护更加容易。

相关问题