Объединить многомерные массивы с общим идентификатором

У меня два многомерных массива:

Первый массив Пиццы:

0 => array:2 [▼ "pizza_id" => 11 "pizza_name" => "Hawaï" ] 1 => array:2 [▼ "pizza_id" => 12 "pizza_name" => "Tonno" ] 2 => array:2 [▼ "pizza_id" => 13 "pizza_name" => "Surprise" ] 

Второй массив Ингредиенты:

 0 => array:4 [▼ "pizza_id" => 11 "ingredient_one" => "Ananas" "ingredient_two" => "Onion" "ingredient_three" => "Ham" ] 1 => array:4 [▼ "pizza_id" => 12 "ingredient_one" => "Tuna" "ingredient_two" => "Onion" "ingredient_three" => null ] 

Я хочу объединить эти два массива, связывая их с помощью pizza_id . Один из идентификаторов пиццы не имеет подходящего массива для ингредиентов (ингредиенты неизвестны), поэтому для этой пиццы я хочу установить ингредиенты в null и получить следующий массив:

Новый массив PizzaAndIngredients:

 0 => array:5 [▼ "pizza_cid" => 11 "pizza_name" => "Hawaï" "ingredient_one" => "Ananas" "ingredient_two" => "Onion" "ingredient_three" => "Ham" ] 1 => array:5 [▼ "pizza_id" => 12 "pizza_name" => "Tonno" "ingredient_one" => "Tuna" "ingredient_two" => "Onion" "ingredient_three" => null ] 2 => array:5 [▼ "pizza_id" => 13 "pizza_name" => "Surprise" "ingredient_one" => null "ingredient_two" => null "ingredient_three" => null ] 

Я array_merge с array_merge , foreach и т. Д., Но не могу получить массив. Альтернативой является создание нового запроса, а также добавление пиццы и ингредиентов, но в реальной жизни массивы намного сложнее, и это будет означать дублирование большого количества кода.

Я надеялся на более эффективное решение слияния двух многомерных массивов.

Моя последняя попытка:

 $PizzaAndIngredients = array(); foreach ($pizzas as $key => $values) { $PizzaAndIngredients[$key] = array_merge($ingredients, $values); } 

Когда вы извлекаете строки из результатов запроса, вы можете установить ключи массива равными pizza_id или переиндексировать их с помощью pizza_id :

 $pizza = array_column($pizza, null, 'pizza_id'); $ingredients = array_column($ingredients, null, 'pizza_id'); 

Затем просто создайте массив по умолчанию, равный null чтобы использовать, если $ingredients не существует, а затем объедините значения $pizza значениями $pizza :

 //get an ingredient array $temp = reset($ingredients); //combine keys and an array of nulls $default = array_combine(array_keys($temp), array_fill(0, count($temp), null)); foreach($pizza as $id => $p_values) { //check if $ingredients[$id] exists, if not use the default $i_values = isset($ingredients[$id]) ? $ingredients[$id] : $default; //you can also use just $result[] if you don't need the pizza_id as key $result[$id] = array_merge($i_values, $p_values); }