• 技术文章 >后端开发 >php教程

    PHP递归算法详解

    墨辰丷墨辰丷2019-11-01 17:14:17原创4235

    本篇文章主要介绍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
                                (
                                )
    
                        )
    
                )
    
        )
    )

    相关推荐:

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

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

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

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 递归 算法
    上一篇:php与ethereum客户端交互使用详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP递归算法(一)• PHP递归算法(二)• PHP递归算法(三)• PHP递归算法(四)
    1/1

    PHP中文网