MySQL — как преобразовать таблицу дерева перечисления пути в массив в PHP?

Я создаю древовидную таблицу по структуре перечисления пути в базе данных mysql. Вот моя таблица:

+----+----------+-----------+-----------+
| id | name     | path      | id_parent |
+----+----------+-----------+-----------+
|  1 | node1    | /1/       | -1        |
|  2 | node2    | /1/2/     | 1         |
|  3 | node3    | /3/       | -1        |
|  4 | node4    | /3/4/     | 3         |
|  5 | node5    | /3/4/5/   | 4         |
+----+----------+-----------+-----------+

Теперь я хочу преобразовать его в массив в PHP, как это:

$tree = [
{
name: 'node1', id: 1,
children: [
{ name: 'node2', id: 2 }
]
},
{
name: 'node3', id: 3,
children: [
{
name: 'node4', id: 4 ,
children: [
{ name: 'node5', id: 5 }
]
}
]
}
]

Функция ниже работает нормально, но она слишком тяжелая для больших данных:

function createTreeDocs($idnode){
global $CON;
$Q="SELECT ID,NAME,PATH FROM documents where ID_PARENT={$idnode} order by PATH asc";
$RES = $CON -> query( $Q );
$NUM = $CON -> num( $RES );
$tree = array();
for($i=0 ; $i<$NUM ; $i++){
$ROW = $CON -> fetch( $RES );
$node = array("name"=> $ROW["NAME"], "id"=> $ROW["ID"]);
$childs = createTreeDocs($ROW["ID"]);
if(sizeof($childs)>0)
$node["children"] = $childs;
array_push($tree,$node);
}
return $tree;
}
print_r(createTreeDocs(-1));

(Я хочу использовать его для плагина jqTree.) Как я могу сделать это без использования рекурсивных функций в php (просто по циклу) ?!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]