Слияние и массив массивов с одинаковыми ключами - PullRequest
0 голосов
/ 03 декабря 2018

Итак, я нашел ответ, который должен работать, но он тоже не появляется ...

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

У меня есть следующий массив под названием $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"
]

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

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

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

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

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

Редактировать 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 Ответ

0 голосов
/ 03 декабря 2018

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

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

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

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

...