Слияние и массив массивов с одинаковыми ключами

Так что я нашел ответ, который должен работать, но он не выглядит слишком …

Уже принят ответ с тем же вопросом.

У меня есть следующий массив под названием $banners:

[
0 => [
"bannerCustomTemplate" => 0,
"bannerId" => 1,
"bannerType" => 1,
"bannerTitle" => "Merry",
"bannerStrapline" => "Christmas",
"bannerPeriod" => "2018-12-01 to 2018-12-10",
"bannerText" => "Christmas opening hours"],
1 => [
"bannerCustomTemplate" => 0,
"bannerId" => 7,
"bannerType" => 2,
"bannerTitle" => "Easter",
"bannerStrapline" => "Test",
"bannerPeriod" => "2018-12-04 to 2018-12-12",
"bannerText" => "dsadasdaas"]
]

Ответы, которые я прочитал, предлагают $all_banners = call_user_func_array('array_merge', $banners);,

Однако это дает мне:

[
"bannerCustomTemplate" => 0,
"bannerId" => 7,
"bannerType" => 2,
"bannerTitle" => "Easter",
"bannerStrapline" => "Test",
"bannerPeriod" => "2018-12-04 to 2018-12-12",
"bannerText" => "dsadasdaas"]

Похоже, это просто замена, а не слияние. У кого-нибудь есть идеи?

редактировать

Просто прочитайте следующий комментарий

Небольшое примечание здесь. Обновленный вариант с массивом распаковки не работает со строковыми ключами. Но первый работает отлично. Просто имейте это в виду. — Все хорошо

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

Редактировать 2

Ну, слияние это объединение не заменяет. Итак, что я ожидаю, это:

[
"bannerCustomTemplate" => [ 0, 0 ],
"bannerId" => [ 1, 7 ],
"bannerType" => [ 1, 2 ],
"bannerTitle" => [ "Merry", "Easter" ]
"bannerStrapline" => [ "Christmas", "Test" ]
"bannerPeriod" => [ "2018-12-01 to 2018-12-10", "2018-12-04 to 2018-12-12" ]
"bannerText" => ["Christmas opening hours", "dsadasdaas" ]
]

-1

Решение

Если известно, что все ваши массивы содержат одинаковые ключи в одном и том же порядке, это, вероятно, проще всего:

$data = [
['foo' => 'bar', 'baz' => 42],
['foo' => 'baz', 'baz' => 69]
];

$result = array_combine(array_keys($data[0]), array_map(null, ...$data));

Это использует полезное поведение array_map с null в качестве обратного вызова взять один элемент из каждого входного массива и вернуть новый комбинированный массив.

1

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

Других решений пока нет …

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