你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在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-3262】陌上花开 CDQ分治(3维偏序)

    3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1439  Solved: 648[Submit][Status][Discuss ...

  2. linux远程登陆其他主机并执行命令的若干方式

    一.命令行登陆 ssh后,一定后边加双引号 写命令,否则命令实在本地执行的,多条命令的话用双引号隔开, ssh user@remoteNode "cd /home ; ls" 二. ...

  3. JS监听DOM结构变化

    在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生成.$("#id").html()是获取不到我想要 ...

  4. CentOS编译安装nodejs

    1. 从node.js官网下载最新版的node.js安装包,node.tar.gz wget https://nodejs.org/dist/v4.3.1/node-v4.3.1.tar.gz    ...

  5. 帝国cms搜索表单用法

    还有一些没有测试,用到了再补充. <form action="[!--news.url--]e/search/index.php" method="post&quo ...

  6. HDU 2544 单源最短路

    题目链接: 传送门 最短路 Time Limit: 1000MS     Memory Limit: 65536K 题目描述 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是 ...

  7. HDU 1598 find the most comfortable road(最小生成树之Kruskal)

    题目链接: 传送门 find the most comfortable road Time Limit: 1000MS     Memory Limit: 32768 K Description XX ...

  8. [Android]ADB Server didn't ACK错误的解决方法

    Eclipse中调试的时候报错 [2014-06-18 13:07:49 - DinnerBooker] The connection to adb is down, and a severe err ...

  9. primefaces p:tableData 显示 List<List>

    @javax.faces.bean.ViewScoped public class Controlador { private List<List> estadistico; @PostC ...

  10. Install R & RStudio for Ubuntu

    Install R r-project.org official source to install the latest R system. add R source   sudo vi /etc/ ...