如何在PHP中将路径枚举树表转换为Array?

时间:2018-05-30 17:12:54

标签: php mysql treeview jqtree

我通过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中将它转换为Array,如下所示:

$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中的递归函数的情况下执行此操作(仅通过循环)?!

0 个答案:

没有答案