本篇文章主要介绍PHP递归算法详解,感兴趣的朋友参考下,希望对大家有所帮助。
遇到需要设计树节点的数据库结构,以及需要读出来的树节点数据结构!大家是否会选择用数据库的查询方式来获取树结构呢?
//曾经的数据库查询获取方式$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
                            (
                            )
                    )
            )
    )
)相关推荐:
立即学习“PHP免费学习笔记(深入)”;
Python基于递归算法实现的汉诺塔与Fibonacci数列
以上就是PHP递归算法详解的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号