Я не уверен, что это то, что вы ищете, и я уверен, что есть много более эффективных способов сделать это.но вот пример:
Учитывая приведенный выше пример ввода.
Этот код:
function index_nodes($nodes, &$index) {
foreach($nodes as $key => $value) {
if ($value) {
$index[$key] = $value;
index_nodes($value, $index);
}
}
}
function nest_list($list) {
$index = array();
index_nodes($list, $index);
// Construct tree
$build_tree = function(&$value, $key) use ($index, &$updated) {
if(array_key_exists($key, $index)) {
$value = $index[$key];
$updated = true;
}
};
// This needs done several times, since I can't be sure I nested things
// in the perfect order.
do {
$updated = false;
array_walk_recursive($list, $build_tree);
} while($updated);
return $list;
}
Выполнить так:
$list2 = nest_list($list);
print_r($list2);
Дает следующий вывод:
Array
(
[178] =>
[179] => Array
(
[180] =>
[181] => Array
(
[191] =>
[192] => Array
(
[194] =>
)
)
[182] =>
[183] =>
)
[184] => Array
(
[185] =>
)
[186] =>
[189] => Array
(
[190] =>
)
[181] => Array
(
[191] =>
[192] => Array
(
[194] =>
)
)
[192] => Array
(
[194] =>
)
)
Еще раз ... большая куча кода, но я думаю, что это приближает вас к вашей цели.