Я создаю древовидную таблицу по структуре перечисления пути в базе данных 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 (просто по циклу) ?!
Задача ещё не решена.
Других решений пока нет …