Коллекции PHP Laravel 5.5 сглаживают и сохраняют целочисленные ключи?

У меня есть следующий массив:

$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']
]

Однако он теряет ключи и просто выдает результаты массива: /
Я использую это неправильно? Как мне сгладить и сохранить ключи?

2

Решение

Элегантное решение заключается в использовании mapWithKeys метод. Это сгладит ваш массив и сохранит ключи:

collect($array)->mapWithKeys(function($a) {
return $a;
});

mapWithKeys Метод перебирает коллекцию и передает каждое значение данному обратному вызову. Обратный вызов должен возвращать ассоциативный массив, содержащий одну пару ключ / значение

1

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

Вы не можете использовать flatten() Вот. У меня нет элегантного решения, но я проверил это, и оно отлично работает для вашего массива:

foreach ($array as $items) {
foreach ($items as $key => $item) {
$newArray[$key] = $item;
}
}

dd($newArray);
3

По вопросам рекламы [email protected]