php详解递归,PHP递归算法详解
本篇文章主要介绍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详解递归,PHP递归算法详解相关推荐
- Java递归求全排列详解
Java递归求全排列详解 推荐博客: 博客园Java全排列递归算法,结尾的解释很形象了 csdn的大佬写的,和我下面的代码思路基本一致 全排列的递归思想解释: 全排列的数学定义就不再过多解释,考虑递归 ...
- python 生成器装饰器_对Python生成器、装饰器、递归的使用详解
1.Python生成器表达式 1).Python生成器表达式 语法格式: (expr for iter_var in iterable) (expr for iter_var in iterable ...
- C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解
这里写目录标题 C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解 开篇语 函数的调用(嵌套调用和链式访问) 1.嵌套调用 2.函数的链式访问 函数的声明和定义 函数声明和定义分 ...
- 递归算法详解——递归算法的三要素以及例题分析
目录 1递归的三要素 1.1明确函数的功能 1.2递归的结束条件 1.3函数的等价关系 2递归案例 递归算法(英语:recursion algorithm)是指一种通过重复将问题分解为同类的子问题而解 ...
- python压缩文件tar_python 实现tar文件压缩解压的实例详解
python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...
- linux+gunzip解压命令,Linux gunzip解压文件命令详解
gunzip(gnu unzip) 功能说明:解压文件. 语法:gunzip [-acfhlLnNqrtvV][-s ][文件-] 或 gunzip [-acfhlLnNqrtvV][-s ][目录] ...
- pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解
python开发之for循环操作实例详解,pythonfor实例详解 本文实例讲述了python开发之for循环操作.分享给大家供大家参考,具体如下: 下面是我做的一些学习记录供大家参考: #基本的f ...
- android WebView详解,常见漏洞详解和安全源码(下)
上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http ...
- android WebView详解,常见漏洞详解和安全源码(上)
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...
最新文章
- 用python怎么赚钱-用python赚钱(python新手怎么兼职)
- MATLAB做离散傅里叶变换DFT
- JS制作日历小事件和数码时钟--JavaScript实例集锦(初学)
- iOS6、7、8、9新特性汇总和适配说明
- SortedList 用法
- 【eNSP 华为模拟器】了解一下交换机原理和基础命令
- 5.16 BScroll页面切换滑动失效,点击事件冒泡(未绑定click也会监听click),transition-group动画特例,BScroll未激活不允许任何事件调用,类的实例和对象
- 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.9 熟悉网上开店的流程...
- 转载:EditPlus下载安装及使用
- 蓝桥杯总结及经验教训
- 金融学python应该学哪些知识_哪些Python基础知识必学
- 怎样将doc格式(word)转成WPS格式
- Bootstrap4文件上传控件美化
- 加速度计和陀螺仪解析
- win7 32/64位系统安装ug nx4.0
- 【数据结构之哈希表(二)】 哈希表的扩容实现机制
- Android配置文件,所有权限ZZ
- 数据库空间管理-学习笔记
- windows 组策略
- 线代 | 【提神醒脑】自用笔记串联三 —— 相似对角化 · 二次型 · 合同变换
热门文章
- cout不明确什么意思_劈腿什么意思?原来出轨和劈腿不一样!原来如此!
- 迷你型MINI光纤收发器的优势有哪些?
- 交换机选用要点及订货主要技术条件
- 工业以太网交换机的安装流程详解
- MATLAB | 解决打开延迟的情况
- 矩阵连乘 动态规划_Java动态规划
- 【MFC系列-第16天】企业信息管理软件开发
- 【定时同步系列4】QPSK调制+OM定时(FFT实现及频域补偿)+信号分段处理+误码率曲线之MATLAB仿真(复信号模型)
- 建立时间、保持时间与亚稳态
- hashmap 扩容是元素还是数组_HashMap 中的容量与扩容实现