<?php
$arr = array(
array('id' => 1, 'title' => 'a', 'parent' => 0),
array('id' => 2, 'title' => 'b', 'parent' => 1),
array('id' => 3, 'title' => 'c', 'parent' => 1),
array('id' => 5, 'title' => 'e', 'parent' => 0),
array('id' => 6, 'title' => 'f', 'parent' => 5),
array('id' => 7, 'title' => 'g', 'parent' => 5),
array('id' => 8, 'title' => 'h', 'parent' => 0),
array('id' => 9, 'title' => 'k', 'parent' => 8),
array('id' => 10, 'title' => 'l', 'parent' => 8),
array('id' => 11, 'title' => 'm', 'parent' => 10),
array('id' => 12, 'title' => 'n', 'parent' => 10),
);
function lookForParent($array, $id, $title) {
$return = array();
for($i = 0; $i <= count($array); $i++) { //Look for the parent on the second level
if(isset($array[$i][$id])) {
$return[$i][$id][] = $title;
break;
} else {
if(!empty($array[$i])) {
$return_val = lookForParent($array[$i], $id, $title);
if(!empty($return_val)) {
$return[$i][$id][] = $return_val;
break;
}
}
}
}
return $return;
}
$new = array();
foreach($arr as $val) {
if($val['parent'] > 0) {
if(isset($new[$val['parent']])) { //Look if the parent exist on the first level
$new[$val['parent']][$val['id']][] = $val['title'];
} else {
for($i = 0; $i <= count($new); $i++) {
$return = lookForParent($new[$i], $val['id'], $val['title']);
if(!empty($return)) {
$new = array_merge($new, $return);
}
}
}
} else {
$new[$val['id']][] = $val['title'];
}
}
var_dump($new);
preferences:
53.86 ms | 402 KiB | 5 Q