I have the following array :
$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']]
];
The following code (flattening) should return it by preserving keys, but it doesnt?
collect($array)->flatten(1);
should give me
[
'3' => ['56' => '2'],
'6' => ['48' => '2'],
'4' => ['433' => '2', '140' => '2'],
'8' => ['421' => '2', '140' => '2'],
'5' => ['88' => '4', '87' => '2']
]
However it loses the keys, and just gives array results :/ Am I using it wrong? How should I flatten and preserve keys?
An elegant solution is to use the mapWithKeys method. This will flatten your array and keep the keys:
collect($array)->mapWithKeys(function($a) {
return $a;
});
The
mapWithKeys
method iterates through the collection and passes each value to the given callback. The callback should return an associative array containing a single key / value pair