У меня есть следующий массив:
$array = [
'2' => ['3' => ['56' => '2'], '6' => ['48' => '2']],
'4' => ['4' => ['433' => '2', '140' => '2'], '8' => ['421' => '2', '140' => '2']],
'5' => ['5' => ['88' => '4', '87' => '2']]
];
Следующий код (выравнивание) должен вернуть его, сохранив ключи, но это не так?
collect($array)->flatten(1);
должен дать мне
[
'3' => ['56' => '2'],
'6' => ['48' => '2'],
'4' => ['433' => '2', '140' => '2'],
'8' => ['421' => '2', '140' => '2'],
'5' => ['88' => '4', '87' => '2']
]
Однако он теряет ключи и просто выдает результаты массива: /
Я использую это неправильно? Как мне сгладить и сохранить ключи?
Элегантное решение заключается в использовании mapWithKeys метод. Это сгладит ваш массив и сохранит ключи:
collect($array)->mapWithKeys(function($a) {
return $a;
});
mapWithKeys
Метод перебирает коллекцию и передает каждое значение данному обратному вызову. Обратный вызов должен возвращать ассоциативный массив, содержащий одну пару ключ / значение
Вы не можете использовать flatten()
Вот. У меня нет элегантного решения, но я проверил это, и оно отлично работает для вашего массива:
foreach ($array as $items) {
foreach ($items as $key => $item) {
$newArray[$key] = $item;
}
}
dd($newArray);