php教程自学网 - 轻松零基础学php视频教程
条幅广告
当前位置: 主页 > PHP学堂 >

PHP递归算法详解

时间:2019-07-07 19:01来源:未知 作者:admin 点击:
遇到需要设计树节点的数据库结构,以及需要读出来的树节点数据结构!大家是否会选择用数据库的查询方式来获取树结构呢? //曾经的数据库查询获取方式$res = $this-db-query(select * fr
遇到需要设计树节点的数据库结构,以及需要读出来的树节点数据结构!大家是否会选择用数据库的查询方式来获取树结构呢?
 
 
 
//曾经的数据库查询获取方式$res = $this->db->query("select * from menu where pid = 0");foreach($res as $k=>$v){     $res[$k]['child'] = $this->db->query("select * from menu where pid =".$v['id']);
 
}
 
//获得结果 $res; 
注意:不得不说,这种方式的确可行,但是它的缺点在于,你需要固定多少层级,以及数据库的大量运行查询。 
不要忽视了那点数据库的查询消耗哦,数据小还无所谓,但是数据量大了。这种可行的方式,会给系统带来很大的负担! 
那么,大家要明白一个道理,有些时候 数据库的操作 利大于 PHP程序算法,有些时候则反之! 
在这种基础的树节点情况下,用算法是最佳的。
 
PHP 代码算法(CI框架实现:并非打广告!)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  public function getMenus(){
 
    //查询
 
    $res = $this->db->get('menu')->result_array();    $res = $this->getChild($res);
 
    print_r($res);
 
}/**
 
 * 递归 树节点算法
 
 * @param array $array
 
 * @param number $pid
 
 */private function getChild($array,$pid = 0){
 
    $data = array();    foreach ($array as $k=>$v){        //PID符合条件的
 
        if($v['pid'] == $pid){            //寻找子集
 
            $child = $this->getChild($array,$v['id']);            //加入数组
 
            $v['child'] = $child?:array(); 
 
            $data[] = $v;//加入数组中
 
        }
 
    }    return $data;
 
}
 
//这样的好处在于,运算速度快,消耗小,而且不定层级。意味着,数据库写多少层级,该算法,都可以获取出来 
结果:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Array(
 
 
 
[0] => Array
 
 
 
    (
 
 
 
        [id] => 1
 
        [title] => PHP中文网
 
        [pid] => 0
 
        [sort] => 0
 
        [child] => Array
 
            (
 
            )
 
 
 
)
 
[1] => Array
 
    (
 
        [id] => 2
 
        [title] => 系统设置
 
        [pid] => 0
 
        [sort] => 99
 
        [child] => Array
 
            (
 
                [0] => Array
 
                    (
 
                        [id] => 4
 
                        [title] => 权限管理
 
                        [pid] => 2
 
                        [sort] => 2
 
                        [child] => Array
 
                            (
 
                            )
 
 
 
                    )
 
 
 
                [1] => Array
 
                    (
 
                        [id] => 5
 
                        [title] => 菜单栏目
 
                        [pid] => 2
 
                        [sort] => 0
 
                        [child] => Array
 
                            (
 
                            )
 
 
 
                    )
 
 
 
                [2] => Array
 
                    (
 
                        [id] => 3
 
                        [title] => 管理员
 
                        [pid] => 2
 
                        [sort] => 99
 
                        [child] => Array
 
                            (
 
                            )
 
 
 
                    )
 
 
 
            )
 
 
 
    )
 
)
(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关推荐
猜你喜欢