首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将路径枚举树表转换为PHP中的数组?

如何将路径枚举树表转换为PHP中的数组?
EN

Stack Overflow用户
提问于 2018-05-31 04:25:39
回答 1查看 0关注 0票数 0

我通过mysql数据库中的路径枚举结构创建一个树表。这里是我的表:

代码语言:javascript
复制
+----+----------+-----------+-----------+
| 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中将其转换为数组,如下所示:

代码语言:javascript
复制
$tree = [
    {
        name: 'node1', id: 1,
        children: [
            { name: 'node2', id: 2 }
        ]
    },
    {
        name: 'node3', id: 3,
        children: [
            { 
                name: 'node4', id: 4 ,
                children: [
                    { name: 'node5', id: 5 }
                ]
            }
        ]
    }
]

下面的功能工作正常:

代码语言:javascript
复制
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中的递归函数(只是通过一个循环)?

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 13:52:08

代码语言:javascript
复制
        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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档