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

419
06 июля 2017, 03:45

Здравствуйте, есть два однотипных многомерных массива, вот пример

$first_arr =[
'date1' => ['type_1' => 'counts'],
'date2' => ['type_1' => 'counts'],
'date3' => ['type_1' => 'counts']
];
$second_arr =[
'date1' => ['type_2' => 'counts'],
'date2' => ['type_2' => 'counts'],
'date3' => ['type_2' => 'counts']
];

Необходимо объединить их так, что бы получился следующий массив:

$result_arr =[
'date1' => ['type_1' => 'counts', 'type_2' => 'counts'],
'date2' => ['type_1' => 'counts', 'type_2' => 'counts'],
'date3' => ['type_1' => 'counts', 'type_2' => 'counts']
];

Казалось бы - основа основ, но не получается сделать так, как нужно. Делаю так:

foreach ($first_arr as $key => $value){
            $data[$key] = ['type_1' => $value['counts']];
}
foreach ($second_arr as $key => $value) {
        array_push($data[$key], $value['counts']);
}

Результат :

$result_arr =[
'date1' => ['type_1' => 'counts', 0 => 'counts'],
'date2' => ['type_1' => 'counts', 1 => 'counts'],
'date3' => ['type_1' => 'counts', 2' => 'counts']
];

Возможно, можно обойтись более элегантным решением?

Answer 1

Так не пойдёт?

foreach ($second_arr as $key => $value) {
        $data[$key] += ['type_2' => $value['counts']];
}

А ещё можно сделать вот так:

foreach ($first_arr as $key => $value){
    $data[$key] = $value;
}
foreach ($second_arr as $key => $value){
    $data[$key] += $value;
}

Ведь значением $value является вложенный массив.

Answer 2

Еще более элегантное решение, использовать функцию array-merge-recursive

Пример

$first_arr =[
    'date1' => ['type_1' => 'counts'],
    'date2' => ['type_1' => 'counts'],
    'date3' => ['type_1' => 'counts']
];
$second_arr =[
    'date1' => ['type_2' => 'counts'],
    'date2' => ['type_2' => 'counts'],
    'date3' => ['type_2' => 'counts'],
    'date4' => ['type_2' => 'counts']
];
$res_array = array_merge_recursive($first_arr, $second_arr);
print_r($res_array);

вернет вам

Array
(
    [date1] => Array
        (
            [type_1] => counts
            [type_2] => counts
        )
    [date2] => Array
        (
            [type_1] => counts
            [type_2] => counts
        )
    [date3] => Array
        (
            [type_1] => counts
            [type_2] => counts
        )
    [date4] => Array
        (
            [type_2] => counts
        )
)

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

READ ALSO
Phalcon MongoDB

Phalcon MongoDB

php70, Phalcon 3

239
Как разбить json на ключ-значение в php?

Как разбить json на ключ-значение в php?

Есть такой ответ от сервера

264
Отрисовка выбранного radio батона

Отрисовка выбранного radio батона

Например, в массиве есть ключ answer, со значением 2 и надо сделать, что бы появилась форма, с радиокнопками и автоматически, была нажата вторая

221
Как выполнить скрипт только при первом просмотре страницы?

Как выполнить скрипт только при первом просмотре страницы?

Добрый день! Нужно поместить на страницу с заказом скрипт (js массив dataLayer с данными для GTM)Но, выполниться он должен при первом просмотре страници...

185