牛骨文教育服务平台(让学习变的简单)
博文笔记

php无限分类 树状菜单经典代码

创建时间:2015-12-29 投稿人: 浏览次数:2915
<?php
    header("content-type:text/html;charset=utf-8");
    $conn = mysql_connect("127.0.0.1", "root", "");
    $s    = mysql_select_db("local_df", $conn);
    mysql_query("set names utf8");
    $sql  = "select * from tree";
    $rs   = mysql_query($sql);
    $arr  = array();
    while ($r    = mysql_fetch_array($rs)) {
        $arr[] = $r;
    }

    $tree = getTree($arr);
    
    print_r($tree);

    
    /**
     * 树状结构
     * @param type $menus   节点信息和
     * @return array
     */
    function getTree($menus) {
        $id          = $level       = 0;
        $menuobjs    = array();
        $tree        = array();
        $notrootmenu = array();
        foreach ($menus as $menu) {
            $menuobj        = new stdClass();
            $menuobj->menu  = $menu;
            $id             = $menu["id"];
            $level          = $menu["p_id"];
            $menuobj->nodes = array();
            $menuobjs[$id]  = $menuobj;
            if ($level) {
                $notrootmenu[] = $menuobj;
            } else {
                $tree[] = $menuobj;
            }
        }

        foreach ($notrootmenu as $menuobj) {
            $menu                      = $menuobj->menu;
            $id                        = $menu["id"];
            $level                     = $menu["p_id"];
            $menuobjs[$level]->nodes[] = $menuobj;
        }
        return $tree;
    }
    




结果如下:


Array
(
    [0] => stdClass Object
        (
            [menu] => Array
                (
                    [0] => 1
                    [id] => 1
                    [1] => 江西
                    [name] => 江西
                    [2] => 0
                    [p_id] => 0
                )

            [nodes] => Array
                (
                    [0] => stdClass Object
                        (
                            [menu] => Array
                                (
                                    [0] => 4
                                    [id] => 4
                                    [1] => 赣州
                                    [name] => 赣州
                                    [2] => 1
                                    [p_id] => 1
                                )

                            [nodes] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [menu] => Array
                                                (
                                                    [0] => 8
                                                    [id] => 8
                                                    [1] => 信丰
                                                    [name] => 信丰
                                                    [2] => 4
                                                    [p_id] => 4
                                                )

                                            [nodes] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [1] => stdClass Object
                        (
                            [menu] => Array
                                (
                                    [0] => 5
                                    [id] => 5
                                    [1] => 南昌
                                    [name] => 南昌
                                    [2] => 1
                                    [p_id] => 1
                                )

                            [nodes] => Array
                                (
                                )

                        )

                )

        )

    [1] => stdClass Object
        (
            [menu] => Array
                (
                    [0] => 2
                    [id] => 2
                    [1] => 湖南
                    [name] => 湖南
                    [2] => 0
                    [p_id] => 0
                )

            [nodes] => Array
                (
                    [0] => stdClass Object
                        (
                            [menu] => Array
                                (
                                    [0] => 6
                                    [id] => 6
                                    [1] => 长沙
                                    [name] => 长沙
                                    [2] => 2
                                    [p_id] => 2
                                )

                            [nodes] => Array
                                (
                                )

                        )

                    [1] => stdClass Object
                        (
                            [menu] => Array
                                (
                                    [0] => 7
                                    [id] => 7
                                    [1] => 岳阳
                                    [name] => 岳阳
                                    [2] => 2
                                    [p_id] => 2
                                )

                            [nodes] => Array
                                (
                                )

                        )

                )

        )

    [2] => stdClass Object
        (
            [menu] => Array
                (
                    [0] => 3
                    [id] => 3
                    [1] => 浙江
                    [name] => 浙江
                    [2] => 0
                    [p_id] => 0
                )

            [nodes] => Array
                (
                )

        )

)


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。