如何将2个具有相同索引和值的数组与php组合?

时间:2018-12-27 02:05:08

标签: php arrays yii2 frameworks

我有2个数组,如下所示:

$array1 = [
 '0' => [
   'no_invoice' => 'INV0001',
   'product_code' => '1111111',
  ], 
 '1' => [
  'no_invoice' => 'INV0001',
  'product_code' => '1111112',
 ]
];

  $array2 = [
    '0' => [
      'product_code' => '1111112',
      'free_valie' => 839,
      'count' => 1240
    ],
  ];

是否可以将上面的数组组合成这样:

Array(
 [0] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111111',
  )
 [1] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111112',
    'free_valie' => 839,
    'count' => 1240
  )
)

因此,如果数组具有相同的产品代码,则它将像上面的示例一样加入。

我已经尝试过使用数组合并array_merge($array1, $array2); 但是结果是这样的:

Array(
 [0] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111111',
  )
 [1] => Array
  (
    'no_invoice' => 'INV0001',
    'product_code' => '1111112',
  )
 [2] => Array
  (
    'product_code' => '1111112',
    'free_valie' => 839,
    'count' => 1240
  )
)

2 个答案:

答案 0 :(得分:4)

此代码将执行您想要的操作。它使用array_search遍历$array1中的每个值,以查看实体的product_code是否也出现在$array2中(通过浏览{的product_code列{1}}使用array_column提取)。如果是,则合并值。请注意,我们在foreach中使用$array2,导致该值通过引用传递,从而允许在循环中对其进行修改

&$val

输出:

foreach ($array1 as &$val) {
    if (($k = array_search($val['product_code'], array_column($array2, 'product_code'))) !== false) {
        $val = array_merge($val, $array2[$k]);
    }
}

print_r($array1);

Demo on 3v4l.org

答案 1 :(得分:2)

尝试以下一项。

$array1 = [
    '0' => [
        'no_invoice'   => 'INV0001',
        'product_code' => '1111111',
    ],
    '1' => [
        'no_invoice'   => 'INV0001',
        'product_code' => '1111112',
    ]
];

$array2 = [
    '0' => [
        'product_code' => '1111112',
        'free_valie'   => 839,
        'count'        => 1240
    ],
];

foreach ($array1 as $key => &$value) {
    $key = array_search($value['product_code'], array_column($array2, 'product_code'));
    if ($key !== false) {
        $value  = array_merge($value, $array2[$key]);
        unset($array2[$key]);
        $array2 = array_values($array2);
    }
}
echo '<pre>';
print_r($array1);
exit;