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%
------分隔线----------------------------
相关推荐
  • PHP学习进程
  • 做为一个php痴迷者,我一直想整理一份系列学习php的计划。下面是我学习php进程

  • PHP手册阅读笔记
  • 学习PHP以来一直希望有时间能够有时间通读PHP手册,最近终于强迫自己划出一些

  • phphome网站管理系统
  • PhpHome非常适合用来建立资讯类网站,比如政府、高校、行业门户和地区门户等

  • PHPCUSTOM集成环境介绍
  • PHPCUSTOM是windows系统下运行的完全绿色的PHP集成开发环境,是目前最便捷也是最

  • PHP生成奖状
  • ob_clean(); $realname = 姓名:最闲的码农; $schoolname = 社区:Laravel; $image = imagecreatefro

  • PHP-FPM与Nginx的通信机制总结
  • PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要

  • PHP基础入门(一)---世界上最好用的编程语言
  • 作为一名程序员,我们应该都听过这样一个梗:PHP编程语言,是世界上最好用的

  • php随机数
  • rand()函数用户获取随机数,具体用法如下: rand()可以设置0个参数或者两个参数

  • php多线程实现
  • 多线程 线程 首先说下线程: 线程(thread) 是操作系统能够进行运算调度的最小单

  • 几种php实现定时任务的思路
  • PHP本身是没有定时功能的,PHP也不能多线程。PHP的定时任务功能必须通过和其他

猜你喜欢