本篇文章主要介绍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递归算法详解相关推荐

  1. Java递归求全排列详解

    Java递归求全排列详解 推荐博客: 博客园Java全排列递归算法,结尾的解释很形象了 csdn的大佬写的,和我下面的代码思路基本一致 全排列的递归思想解释: 全排列的数学定义就不再过多解释,考虑递归 ...

  2. python 生成器装饰器_对Python生成器、装饰器、递归的使用详解

    1.Python生成器表达式 1).Python生成器表达式 语法格式: (expr for iter_var in iterable) (expr for iter_var in iterable ...

  3. C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解

    这里写目录标题 C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解 开篇语 函数的调用(嵌套调用和链式访问) 1.嵌套调用 2.函数的链式访问 函数的声明和定义 函数声明和定义分 ...

  4. 递归算法详解——递归算法的三要素以及例题分析

    目录 1递归的三要素 1.1明确函数的功能 1.2递归的结束条件 1.3函数的等价关系 2递归案例 递归算法(英语:recursion algorithm)是指一种通过重复将问题分解为同类的子问题而解 ...

  5. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  6. linux+gunzip解压命令,Linux gunzip解压文件命令详解

    gunzip(gnu unzip) 功能说明:解压文件. 语法:gunzip [-acfhlLnNqrtvV][-s ][文件-] 或 gunzip [-acfhlLnNqrtvV][-s ][目录] ...

  7. pythonfor循环案例教程_python开发之for循环操作实例详解,pythonfor实例详解

    python开发之for循环操作实例详解,pythonfor实例详解 本文实例讲述了python开发之for循环操作.分享给大家供大家参考,具体如下: 下面是我做的一些学习记录供大家参考: #基本的f ...

  8. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  9. android WebView详解,常见漏洞详解和安全源码(上)

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...

最新文章

  1. 用python怎么赚钱-用python赚钱(python新手怎么兼职)
  2. MATLAB做离散傅里叶变换DFT
  3. JS制作日历小事件和数码时钟--JavaScript实例集锦(初学)
  4. iOS6、7、8、9新特性汇总和适配说明
  5. SortedList 用法
  6. 【eNSP 华为模拟器】了解一下交换机原理和基础命令
  7. 5.16 BScroll页面切换滑动失效,点击事件冒泡(未绑定click也会监听click),transition-group动画特例,BScroll未激活不允许任何事件调用,类的实例和对象
  8. 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.9 熟悉网上开店的流程...
  9. 转载:EditPlus下载安装及使用
  10. 蓝桥杯总结及经验教训
  11. 金融学python应该学哪些知识_哪些Python基础知识必学
  12. 怎样将doc格式(word)转成WPS格式
  13. Bootstrap4文件上传控件美化
  14. 加速度计和陀螺仪解析
  15. win7 32/64位系统安装ug nx4.0
  16. 【数据结构之哈希表(二)】 哈希表的扩容实现机制
  17. Android配置文件,所有权限ZZ
  18. 数据库空间管理-学习笔记
  19. windows 组策略
  20. 线代 | 【提神醒脑】自用笔记串联三 —— 相似对角化 · 二次型 · 合同变换

热门文章

  1. cout不明确什么意思_劈腿什么意思?原来出轨和劈腿不一样!原来如此!
  2. 迷你型MINI光纤收发器的优势有哪些?
  3. 交换机选用要点及订货主要技术条件
  4. 工业以太网交换机的安装流程详解
  5. MATLAB | 解决打开延迟的情况
  6. 矩阵连乘 动态规划_Java动态规划
  7. 【MFC系列-第16天】企业信息管理软件开发
  8. 【定时同步系列4】QPSK调制+OM定时(FFT实现及频域补偿)+信号分段处理+误码率曲线之MATLAB仿真(复信号模型)
  9. 建立时间、保持时间与亚稳态
  10. hashmap 扩容是元素还是数组_HashMap 中的容量与扩容实现