首页 > 学院 > 逻辑算法 > 正文

PHP递归算法详解

2020-03-22 18:54:19
字体:
来源:转载
供稿:网友

本篇文章主要介绍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框架实现:并非打广告!)

  html' target='_blank'>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                            (                            )                    )            )    ))

相关推荐:

Python基于递归算法实现的汉诺塔与Fibonacci数列

PHP汉诺塔问题的递归算法的实现和迭代算法的实现

PHP汉诺塔问题的递归算法实现和迭代算法实现

以上就是PHP递归算法详解的详细内容,更多请关注 其它相关文章!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表