Объединить два ассоциативных массива php

Рейтинг: -1Ответов: 1Опубликовано: 23.02.2023

Господа, мое почтение! Имею головную боль с двумя массивами:

$arr_1 = [
           "красный" => "12",
           "желтый" => "9"
         ];

$arr_2 = [
           "зеленый" => "5",
           "красный" => "3"
         ];

$out_arr = ["" => ""]; // пустой, скоро станет понятно почему!

Мне Эти два ($arr_1 и $arr_2) массива нужно объединить (разумеется они больше) но с проведением проверок, по ключу

Что я сделал:

foreach ($arr_1 as $a_1_key => $a_1_value) {

   foreach ($arr_2 as $a_2_key => $a_2_value) {

      if ($a_1_key == $a_2_key) {

         echo "super!";

      } else {

         echo "not super(";

      }

   }

}

Так вот трудность заключается в том, что по результатам проверок, мне нужно эти массивы объединить и положить в $out_arr, но ума не приложу как! Пробовал через array_push, array_merge, но выходит какая-то наркомания!

Пните плз в нужном направлении. Если вы видите явный идиотизм в логике, то прошу не минусовать, а дать совет от умного человека)

<3

Ответы

▲ 0

Проще будет извлечь все ключи из из всех массивов, получить их уникальный список, и потом пройтись по всем массивам, объединяя значения из каждого под каждым из ключей.

<?php

$Array1 = [
     "красный" => "12",
     "желтый" => "9"
   ];

$Array2 = [
     "зеленый" => "5",
     "красный" => "3"
   ];
   
$AllKeys = array_merge(array_keys($Array1), array_keys($Array2));
$UniqueKeys = array_unique($AllKeys);
$Combined = [];

foreach($UniqueKeys as $UniqueKey) {
    if(isset($Array1[$UniqueKey])) {
       $Combined[$UniqueKey][] = $Array1[$UniqueKey];
    }
    if(isset($Array2[$UniqueKey])) {
       $Combined[$UniqueKey][] = $Array2[$UniqueKey];
    }
}

print_r($Combined);

Результат:

Array
(
[красный] => Array
    (
        [0] => 12
        [1] => 3
    )

[желтый] => Array
    (
        [0] => 9
    )

[зеленый] => Array
    (
        [0] => 5
    )

)