Объединить два ассоциативных массива php
Господа, мое почтение! Имею головную боль с двумя массивами:
$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
Ответы (1 шт):
Проще будет извлечь все ключи из из всех массивов, получить их уникальный список, и потом пройтись по всем массивам, объединяя значения из каждого под каждым из ключей.
<?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
)
)