你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。

  1. function generateTree($items){
  2. $tree = array();
  3. foreach($items as $item){
  4. if(isset($items[$item['pid']])){
  5. $items[$item['pid']]['son'][]=&$items[$item['id']];
  6. }else{
  7. $tree[]=&$items[$item['id']];
  8. }
  9. }
  10. return $tree;
  11. }
  12. $items = array(
  13. 1=> array('id'=>1,'pid'=>0,'name'=>'安徽省'),
  14. 2=> array('id'=>2,'pid'=>0,'name'=>'浙江省'),
  15. 3=> array('id'=>3,'pid'=>1,'name'=>'合肥市'),
  16. 4=> array('id'=>4,'pid'=>3,'name'=>'长丰县'),
  17. 5=> array('id'=>5,'pid'=>1,'name'=>'安庆市'),
  18. );
  19. print_r(generateTree($items));

可以看到下面打印的结果:

  1. Array
  2. (
  3. [0]=>Array
  4. (
  5. [id]=>1
  6. [pid]=>0
  7. [name]=>安徽省
  8. [son]=>Array
  9. (
  10. [0]=>Array
  11. (
  12. [id]=>3
  13. [pid]=>1
  14. [name]=>合肥市
  15. [son]=>Array
  16. (
  17. [0]=>Array
  18. (
  19. [id]=>4
  20. [pid]=>3
  21. [name]=>长丰县
  22. )
  23. )
  24. )
  25. [1]=>Array
  26. (
  27. [id]=>5
  28. [pid]=>1
  29. [name]=>安庆市
  30. )
  31. )
  32. )
  33. [1]=>Array
  34. (
  35. [id]=>2
  36. [pid]=>0
  37. [name]=>浙江省
  38. )
  39. )

上面生成树方法还可以精简到5行:

  1. function generateTree($items){
  2. foreach($items as $item)
  3. $items[$item['pid']]['son'][$item['id']]=&$items[$item['id']];
  4. return isset($items[0]['son'])? $items[0]['son']: array();
  5. }

上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:

    1. /**
    2. * 如何取数据格式化的树形数据
    3. * @blog<http://www.phpddt.com>
    4. */
    5. $tree = generateTree($items);
    6. function getTreeData($tree){
    7. foreach($tree as $t){
    8. echo $t['name'].'<br>';
    9. if(isset($t['son'])){
    10. getTreeData($t['son']);
    11. }
    12. }
    13. }
    14. getTreeData($tree);

分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)的更多相关文章

  1. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  2. PHP无限极分类生成树方法

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,整理分享了. function genera ...

  3. PHP无限分类生成树方法,非递归,引用

    //这个是核心方法 function generateTree($items){     $tree = array();     foreach($items as $item){         ...

  4. 【项目总结】:怎样做一个牛逼的Team leader?

    随着ITOO高校云平台3.1项目的结束,我们各种各样的总结也被提上了日程. Java版本号的全部开发者和Donet版本号的全部开发者坐在一起进行了关于项目开发管理的头脑风暴,尽管我仅仅是Donet开发 ...

  5. 如何设计一个牛逼的API接口

    在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...

  6. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  7. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  8. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  9. PHP无限极分类

      当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...

随机推荐

  1. 12个Icon图标资源网站

    1.除了Icon以外,还有很多不错的UI设计素材. 地址:http://worldui.com/2.除了免费Icon资源下载以外,还提供Icon定制的付费服务.地址:http://dryicons.c ...

  2. gocode 安装

    1.安装git,将git/bin添加至PATH 2.执行go get -u github.com/nsf/gocode 3.在%GOPATH%/bin/下会生成gocode.exe

  3. 搭建hive到eclipse里面

    (1)下载源码 git clone https://git-wip-us.apache.org/repos/asf/hive.git git clone https://github.com/apac ...

  4. ASP.NET MVC轻教程 Step By Step 7——改进Write动作方法

    在上一节我们使用强类型视图改进Write视图获得更好的智能感知和代码重构,现在可以进一步的改进动作方法. Step 1. 数据模型绑定 在Save方法中我们使用Request来获取表单传送的值,其实可 ...

  5. jq总结1

    选择器 /** * 多目标选择器 * 可以选择多个元素或者表达式, * 包装成 jQuery 对象的集合 * 例子:$("div,span") */ $("table t ...

  6. 最常用的动态sql语句梳理——分享给使用Mybatis的小伙伴们!

    公司项目中一直使用Mybatis作为持久层框架,自然,动态sql写得也比较多了,最常见的莫过于在查询语句中使用if标签来动态地改变过滤条件了.Mybatis的强大特性之一便是它的动态sql,免除了拼接 ...

  7. 如何在DJANGO里,向有外键(一对多和多对多)的DB里插入数据?

    需要插入的数据表结构如下: class UserInfo(models.Model): user_id =models.AutoField(primary_key=True) user_name=mo ...

  8. keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法

    以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或 ...

  9. I2C读写时序

    1. I2C写时序图: 注意:最后一个byte后,结束标志在第十个CLK上升沿之后: 2. I2C读时序图: 注意:restart信号格式:读操作结束前最后一组clk的最后一个上升沿,主机应发送NAC ...

  10. 当一个控件属性不存在的时候,IDE会出错在这里

    procedure TWinControl.ReadState(Reader: TReader); begin DisableAlign; try inherited ReadState(Reader ...