我通过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));
我怎么能做到这一点,而不使用PHP中的递归函数(只是通过一个循环)?
发布于 2018-05-31 13:52:08
function createTreeDocs(){
global $CON;
$Q="SELECT ID,NAME,PATH,CONTER_SEEN,VIEW,ID_PARENT FROM documents order by PATH desc";
$RES = $CON -> query( $Q );
$NUM = $CON -> num( $RES );
$tree = array();
$nowParent = -1;
$oneTree = array();
$parentChanged = true;
for($i=0 ; $i<$NUM ; $i++){
$ROW = $CON -> fetch( $RES );
$node = array("name"=> $ROW["NAME"], "id"=> $ROW["ID"]);
if($parentChanged) $nowParent = $ROW["ID_PARENT"];
if($nowParent==$ROW["ID_PARENT"] && $ROW["ID_PARENT"]!=-1){
array_push($oneTree,$node);
$parentChanged = false;
}else{
if(sizeof($oneTree)>0)
$node["children"] = array_reverse($oneTree);
if($ROW["ID_PARENT"]==-1){
array_push($tree,$node);
$oneTree = array();
}else{
$oneTree = $node;
}
$parentChanged = true;
}
$nowParent = $ROW["ID_PARENT"];
}
return array_reverse($tree);
}
echo json_encode(createTreeDocs(),JSON_UNESCAPED_UNICODE);
https://stackoverflow.com/questions/-100004655
复制相似问题