Convert flat array to nested array
I am trying to convert a flat array to a nested array based on the level data of each element of the array. The 'level' data tells us if the current element of the array is child, parent, or sibling.
Here's a flat array:
$flatArray = array(
array('title'=>'Page 1', 'level'=>0),
array('title'=>'Page 2', 'level'=>0),
array('title'=>'Page 3', 'level'=>1),
array('title'=>'Page 4', 'level'=>1),
array('title'=>'Page 5', 'level'=>2),
array('title'=>'Page 6', 'level'=>0),
array('title'=>'Page 7', 'level'=>1),
array('title'=>'Page 8', 'level'=>0)
);
And here's the expected output:
$nestedArray = array(
array('title'=>'Page 1', 'children'=>array()),
array('title'=>'Page 2', 'children'=>array(
array('title'=>'Page 3', 'children'=>array()),
array('title'=>'Page 4', 'children'=>array(
array('title'=>'Page 5', 'children'=>array())
)),
)),
array('title'=>'Page 6', 'children'=>array(
array('title'=>'Page 7', 'children'=>array())
)),
array('title'=>'Page 8', 'children'=>array()),
);
I tried using references with array indices, but it didn't work.
+2
a source to share
1 answer
Does it help? I think this is correct ... perhaps: D Sorry if it isn't.
$nestedArray = array();
foreach ($flatArray as $key => $value) {
$current = &$nestedArray;
$level = $value['level'];
while ($level > 0) {
$last = &$current[count($current) - 1];
$current = &$last['children'];
--$level;
}
$current[] = array('title' => $value['title'], 'children' => array());
}
+3
a source to share