递归无限级分类有几种形式,我这里仅仅举例比較经常使用的三种:

第一种:返回有排序的数组:

  1. <?php
  2.  
  3. $data = array(
  4. 1 => array(
  5. 'id' => 1,
  6. 'pid' => 0,
  7. 'user_name' => 'one',
  8. ),
  9. 2 => array(
  10. 'id' => 2,
  11. 'pid' => 1,
  12. 'user_name' => 'two',
  13. ),
  14. 3 => array(
  15. 'id' => 3,
  16. 'pid' => 1,
  17. 'user_name' => 'two',
  18. ),
  19. 4 => array(
  20. 'id' => 4,
  21. 'pid' => 2,
  22. 'user_name' => 'three',
  23. ),
  24. 5 => array(
  25. 'id' => 5,
  26. 'pid' => 2,
  27. 'user_name' => 'three',
  28. ),
  29. 6 => array(
  30. 'id' => 6,
  31. 'pid' => 5,
  32. 'user_name' => 'four',
  33. ),
  34. );
  35.  
  36. function genCate( $data, $pid = 0, $level = 0 ) {
  37. static $result = array();
  38. $result = ($level == 0) ? array() : $result;
  39. $prefix = ($level == 0) ? '' : str_repeat( '-', $level );
  40. foreach ( $data as $key => $row ) {
  41. if ( $row['pid'] == $pid ) {
  42. $row['user_name'] = $prefix . $row['user_name'];
  43. $result[] = $row['user_name'];
  44. genCate( $data, $row['id'], $level + 1 );
  45. }
  46. }
  47. return $result;
  48. }
  49.  
  50. echo '<pre>';
  51. $result = genCate( $data );
  52. print_r( $result );
  53. exit;
  54. ?>

另外一种:返回html字符串形式:

  1. function getTreeHtml( $data, $pId ) {
  2. $html = '';
  3. foreach ( $data as $k => $v ) {
  4. if ( $v['pid'] == $pId ) {
  5. $html .= "<li>" . $v['user_name'];
  6. $html .= getTree( $data, $v['id'] );
  7. $html = $html . "</li>";
  8. }
  9. }
  10. return $html ? '<ul>' . $html . '</ul>' : $html;
  11. }

第三种:返回多维数组形式:

  1. function getTreeArray( $data, $pId = 0 ) {
  2. $tree = array();
  3. foreach ( $data as $key => $value ) {
  4. if ( $value['pid'] == $pId ) {
  5. $value['childrens'] = getTreeArray( $data, $value['id'] );
  6. $tree[] = $value;
  7. }
  8. }
  9. return $tree;
  10. }

php递归无限极分类的更多相关文章

  1. Think PHP递归重新排序无限极子分类数组(递归无限极分类)

    Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...

  2. php递归无限极分类实例

    无限级分类原理简介 无限分类看似"高大上",实际上原理是非常简单的 .无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性.要满足无限级分类,数据库需要有两个必须的字段,id ...

  3. php无限极分类递归与普通

    1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...

  4. php不使用递归实现无限极分类

    无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能 1.数据库设计 通过上图可以看出pid就是该栏目的父id,而path = 父path+pi ...

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

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

  6. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  7. js实现无限极分类

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

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

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

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

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

随机推荐

  1. js不能执行,IE处理方法

    一.如果你的ie不能打开js脚本(连系统里所有的js文件都不运行,网页上的js广告或好多页面都显示不了),请按一下步骤进行排查与解决: 1.查看是否IE的安全里面禁止了JS的运行: 将工具=>i ...

  2. UVa 753 (二分图最大匹配) A Plug for UNIX

    题意: 有n个插座,m个设备以及k种转化器(每种转化器视为有无限个). 转换器A->B可以将A类型的插头转化成B类型的插头,所以可以插在B类型的插座上. 求最少剩多少不匹配的设备. 分析: 抛开 ...

  3. varchar与nvarchar的区别

    nvarchar可变长度的Unicode字符数据 varchar可变长度且非 Unicode 的字符数据 举例: varchar(1)   --可以插进入一个数字或者一个字母,如果要插入一个汉字改为v ...

  4. apache开源项目--HttpComponents

    HttpComponents 也就是以前的httpclient项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议.不 ...

  5. './mysql-bin.index' not found (Errcode: 13) 的解决方法

    将文件系统复制到PC机上,然后再拷贝到别的SD卡后,发现mysql无法启动了,首先检查了一下mysql的错误日志,发现最后出现以下错误: /usr/local/mysql/libexec/mysqld ...

  6. Kettle定时执行(ETL工具)【转】

    1,Kettle跨平台使用.    例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下:    1)进入到Kettle部署的路径 ...

  7. REST API TESTING

    在敏捷开发过程中 每隔两周就是一个sprint,,, 在上个sprint中,任务就是REST API TESTING 因为以前没做过API 测试,不懂,然后经过询问查找 终于知道,需要发送请求,然后获 ...

  8. [GC]一个简单的Garbage Collector的实现

    前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为了增加自己的理解,决定把大牛的想法和代码分析一遍,与 ...

  9. windows内核初窥(二)-----系统机制

    系统机制: windows2000为执行体.内核.设备驱动程序等核心态部分提供了一些基础机制.先让我们看看都有哪些: (1)陷阱调度:包括中断.延迟过程调用(DPC).异步过程调用(APC).异常处理 ...

  10. NOIP2011 计算系数

    1计算系数 给定一个多项式 (ax + by)k ,请求出多项式展开后 x n y m 项的系数. [输入] 输入文件名为 factor.in. 共一行,包含 5 个整数,分别为 a,b,k,n,m, ...