php - Flatten multidimensional array to 3 levels preserving the first level keys
379
I have a nested multidimensional array like this:
$array = [
1 => [
[
['catName' => 'Villes', 'catUrl' => 'villes', 'parent' => 151],
[
['catName' => 'Administratif', 'catUrl' => 'territoire', 'parent' => 37],
[
['catName' => 'Gegraphie', 'catUrl' => 'geographie', 'parent' => 0]
]
]
]
]
];
I would like to flatten it to a simpler structure, like this:
array (
1 =>
array (
0 =>
array (
'catName' => 'Villes',
'catUrl' => 'villes',
'parent' => 151,
),
1 =>
array (
'catName' => 'Administratif',
'catUrl' => 'territoire',
'parent' => 37,
),
2 =>
array (
'catName' => 'Gegraphie',
'catUrl' => 'geographie',
'parent' => 0,
),
),
)
I suppose it would work with some recursive function, but my skills in there are not my best. How can I accomplish this?
Answer
Solution:
Here is one way to do it. This function will collapse each level:
It can be applied to your array like this:
Answer
Solution:
It's not pretty, but it works:
Answer
Solution:
Make a recursive call on each first level element.
Within the recursive function, first isolate the non-iterable elements and push them as a single new row into the desired result array. Then execute the recursive function on each iterable element on that level.
It is important to "pass data back up" with each each recursive call so that all deep data can be collected and returned in the top-level/finished array.
The global-level foreach modifies by reference so that the assignment of
$parent
mutates the original input array.Code: (Demo)
Answer
Solution:
You could try
Answer
Solution:
if the structure will always be the same as what you've shown then i think you can do this: