Как объединить 2 массива, которые имеют одинаковый индекс и значение с php? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть 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 голосов
/ 27 декабря 2018

Попробуйте ниже единицы.

$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;
0 голосов
/ 27 декабря 2018

Этот код будет делать то, что вы хотите.Он циклически перебирает каждое значение в $array1, используя array_search, чтобы увидеть, присутствует ли product_code записи в $array2 (просматривая столбец product_code $array2, извлеченный с использованиемarray_column).Если это так, значения объединяются.Обратите внимание, что мы используем &$val в foreach, в результате чего значение передается по ссылке, что позволяет изменять его в цикле

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);

Вывод:

Array
(
    [0] => Array
        (
            [no_invoice] => INV0001
            [product_code] => 1111111
        )

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

)

Демо на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...