Объединять массивы с соответствующими ключами в PHP

#php #arrays

#php #массивы

Вопрос:

Каков наилучший способ объединить два массива путем сопоставления значений в ключах в каждом массиве. Например, у меня есть два массива:

     Array
    (
        [id]  => 1
        [name]    => Apple
        [color] => Green
    )
    (
        [id]  => 2
        [name]    => Banana
        [color] => Yellow
    )
    (
        [id]  => 3
        [name]    => Tomato
        [color] => Red
    )
    Array
    (
        [product_id]  => 1
        [price]    => 0.50
        [weight] => 50
    )
    (
        [product_id]  => 2
        [price]    => 0.99
        [weight] => 80
    )
    (
        [product_id]  => 3
        [price]    => 0.35
        [weight] => 40
)
  

И я хочу объединить, где ‘id’ = ‘product_id’ для получения:

 Array
(
    [id]  => 1
    [name]    => Apple
    [color] => Green
    [price]    => 0.50
    [weight] => 50
)
(
    [id]  => 2
    [name]    => Banana
    [color] => Yellow
    [price]    => 0.99
    [weight] => 80
)
(
    [id]  => 3
    [name]    => Tomato
    [color] => Red
    [price]    => 0.35
    [weight] => 40
)
  

Ответ №1:

Для этого вам нужно будет написать пользовательскую функцию. Например:

 <?php
function combine_arrays($array1,$array2){
   $merged_array = array();
   for($i=0; $i<count($array1); $i  )
   {
       if($array1[$i]['id'] == $array2[$i]['product_id'])
       {        
           $merged_array[] = array_merge($array1[$i],$array2[$i]);
       }
   }
   return $merged_array;
}
?>
  

Ответ №2:

Итак, в этом случае я бы создал два новых массива, добавив идентификатор в качестве индекса, вот так:

 $newArray1 = array();
$newArray2 = array();

foreach ($array1 as $key => $value) { $newArray1[$value['id']] = $value; }
foreach ($array2 as $key => $value) { $newArray2[$value['product_id']] = $value; }
  

После этого легко объединить массивы:

 foreach ($array1 as $key => $value)
{
    if (is_array($array1[$key]) amp;amp; is_array($array2[$key]))
    {
        $result[] = array_merge($array1[$key], $array2[$key]);
    }
}
  

(Возможно, вам придется добавить дополнительные проверки, если два массива не содержат один и тот же пул идентификаторов или количество целых значений отличается)