<?php
$array = [
['level'=>1, 'name' => 'Root #1'],
['level'=>1, 'name' => 'Root #2'],
['level'=>2, 'name' => 'subroot 2-1'],
['level'=>3, 'name' => '__subroot 2-1/1'],
['level'=>2, 'name' => 'subroot 2-2'],
['level'=>1, 'name' => 'Root #3']
];
function buildTree
(array &$nodes) { $activeNodes = [];
foreach ($nodes as $index => &$node) {
$node['children'] = [];
$level = $node['level'];
$activeNodes[$level] = &$node;
if ($level > 1) {
$activeNodes[$level - 1]['children'][] = &$node;
}
}
}
buildTree($array);
echo '<pre>';
PD9waHAKJGFycmF5ID0gWwogIFsnbGV2ZWwnPT4xLCAnbmFtZScgPT4gJ1Jvb3QgIzEnXSwKICBbJ2xldmVsJz0+MSwgJ25hbWUnID0+ICdSb290ICMyJ10sCiAgWydsZXZlbCc9PjIsICduYW1lJyA9PiAnc3Vicm9vdCAyLTEnXSwKICBbJ2xldmVsJz0+MywgJ25hbWUnID0+ICdfX3N1YnJvb3QgMi0xLzEnXSwKICBbJ2xldmVsJz0+MiwgJ25hbWUnID0+ICdzdWJyb290IDItMiddLAogIFsnbGV2ZWwnPT4xLCAnbmFtZScgPT4gJ1Jvb3QgIzMnXQpdOwogCmZ1bmN0aW9uIGJ1aWxkVHJlZShhcnJheSAmJG5vZGVzKSB7CiAgICAgICAgJGFjdGl2ZU5vZGVzID0gW107CiAgICAgICAKICAgICAgICBmb3JlYWNoICgkbm9kZXMgYXMgJGluZGV4ID0+ICYkbm9kZSkgewogICAgICAgICAgICAgICAgJG5vZGVbJ2NoaWxkcmVuJ10gPSBbXTsKICAgICAgICAgICAgICAgICRsZXZlbCA9ICRub2RlWydsZXZlbCddOwogICAgICAgICAgICAgICAgJGFjdGl2ZU5vZGVzWyRsZXZlbF0gPSAmJG5vZGU7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCRsZXZlbCA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZU5vZGVzWyRsZXZlbCAtIDFdWydjaGlsZHJlbiddW10gPSAmJG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KCRub2Rlc1skaW5kZXhdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KIApidWlsZFRyZWUoJGFycmF5KTsKZWNobyAnPHByZT4nOwp2YXJfZHVtcCgkYXJyYXkpOw==