отображение ассоциативного массива с другим ассоциативным массивом

Я нашел способ решить мою проблему, но я хочу посмотреть, есть ли лучшее или ясное решение для этого. У меня есть два ассоциативных массива, как это:

$person= [
"A" => [
"sur" => "a",
"fir" => "andras"],
"C" =>  [
"sur" => "b",
"fir" => "balint"]
];
$data = [
"A" => ["011", "012", "013"],
"C" => ["021", "022"]
];

Я хочу отобразить два массива, если их ключи равны. Таким образом, результат должен выглядеть следующим образом:

$person= [
"A" => [
"sur" => "a",
"fir" => "andras",
"tel" => ["011", "012", "013"]
],
"C" =>  [
"sur" => "b",
"fir" => "balint",
"tel" => ["021", "022"]
]
];

Мой код:

foreach ( array_intersect_key(array_keys($data,$person)) as $id) {
$person[$id]['tel'] = $data[$id];
}

0

Решение

Ваш метод выглядит хорошо для меня. Для вашего примера я бы сделал это так:

array_walk($person, function(&$v, $k) use ($data) {
$v['tel'] = $data[$k];
});

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

1

Другие решения

Похоже, что вы хотите зациклить два массива с одинаковым индексом …
так попробуй это

foreach ($person as $key => $value) {
$person[$key]['tel'] = $data[$key];
}
var_dump($person);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector