我在 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 中的递归函数(仅通过循环)的情况下做到这一点?