你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在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);

转载请注明地址: http://www.phpddt.com/php/generateTree.html

PHP无限极分类生成树方法,无限分级的更多相关文章

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

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

  2. 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)

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

  3. PHP使用引用实现无限极分类

    PHP实现无限极分类 引用 <?php /** * 无限极分类实现 * @param $list array 需要处理的数组 * @param $pk string 主id * @param $ ...

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

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

  5. PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

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

  6. PHP无限极分类的几种方法

    导读:项目开发,经常栏目要做到无限极分类,几种方法PHP无限极分类的几种方法 复制代码 代码如下:namespace Util;class Category{static public functio ...

  7. 【laravel5.4】Baum无限极分类和collect助手函数、transform()中间件(转换数据)方法使用

    1.目的,无限极分类 /* * getdepartment:获取[当前登录用户对应公司的所有有效部门] * DB::table ==>返回查询构造器结果,不会返回一个collect实例 * 而 ...

  8. sqlalchemy tree 树形分类 无限极分类的管理。预排序树,左右值树。sqlalchemy-mptt

    简介: 无限极分类是一种比较常见的数据格式,生成组织结构,生成商品分类信息,权限管理当中的细节权限设置,都离不开无限极分类的管理. 常见的有链表式,即有一个Pid指向上级的ID,以此来设置结构.写的时 ...

  9. PHP实现无限极分类的两种方式,递归和引用

    面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...

随机推荐

  1. 【BZOJ-3306】树 线段树 + DFS序

    3306: 树 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 792  Solved: 262[Submit][Status][Discuss] De ...

  2. 通过VMwarek可以安装Android_x86

    Android也能安装到VMware上,不过内核是x86的. Android_x86下载资源:http://www.x86android.com/portal.php VMware版本>=12 ...

  3. CruiseControl.NET/CCNET安装包下载

    链接:http://pan.baidu.com/s/1bHgeCI 密码:d7q1

  4. eclipse crash

    SIGSEGV (0xb) at pc=0x00007fbcae8f2c91, pid=5707, tid=140449979574016 JRE version: 7.0_25-b30 Java V ...

  5. Android成长日记-Fragment

    (一)Android在3.0中引入了Fragment的概念,主要目的是用在大屏幕设备上—例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕要比手机大的多,有更多的空间放更多的UI组件,并且这 ...

  6. Uva1515 Pool construction

    Time Limit: 3000MS64bit IO Format: %lld & %llu 网络流 最小割 心生绝望,用了好久的网络流模板居然是错的. ↑居然之前还侥幸能过一堆(并不)题. ...

  7. [NOIP2014] 提高组 洛谷P2296 寻找道路

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  8. Linux C/C++ Memory Leak Detection Tool

    目录 . 内存使用情况分析 . 内存泄漏(memory leak) . Valgrind使用 1. 内存使用情况分析 0x1: 系统总内存的分析 可以从proc目录下的meminfo文件了解到当前系统 ...

  9. yocto系统介绍

    The Yocto Project is an open source collaboration project that provides templates, tools and methods ...

  10. requst方法简单用一下

    使用getParametar() 获取表单提交过来的文本框的值 setAttribute(String name, Object o)存储此请求中的属性.在请求之间重置属性.此方法常常与 Reques ...