原文章地址:http://www.thinkphp.cn/code/170.html

超级无限分类 使用简单 效率极高 核心代码10行不到

另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^

效果图 

核心代码如下

  1. class Tool {
  2. static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空
  3. /**
  4. * 无限级分类
  5. * @access public
  6. * @param Array $data     //数据库里获取的结果集
  7. * @param Int $pid
  8. * @param Int $count       //第几级分类
  9. * @return Array $treeList
  10. */
  11. static public function tree(&$data,$pid = 0,$count = 1) {
  12. foreach ($data as $key => $value){
  13. if($value['Pid']==$pid){
  14. $value['Count'] = $count;
  15. self::$treeList []=$value;
  16. unset($data[$key]);
  17. self::tree($data,$value['Id'],$count+1);
  18. }
  19. }
  20. return self::$treeList ;
  21. }
  22. }
复制代码

$treeList[] 保存排序的结果 基本就是进行了一次排序 保存后就可以 unset($data[$key]); 掉 因为已经使用不到了

&$data 使用按地址传参,结合unset($data[$key]); 减少循环次数,这样效率提高了好几倍,
但需要对 Pid进行 ASC的排序 不然会显示不完全
$value['Count'] = $count; 为当前的等级 在模板里会通过等级进行生成树形结构

排序前后的数据结构如下
表所需要字段 Id,Pid

排序前的数据结构
id   pid 
1    0
2    0
3    1
4     3


排序后的数据结构
id  pid  count 
1   0    1
3   1   2
4   3    3
2   0   1

  1. //默认列表
  2. public function index() {
  3. $menu = M('Menu');
  4. $list = $menu->order('Pid ASC,Morder DESC,Id ASC')->select();
  5. $this->assign('List',Tool::tree($list));
  6. $this->display();
  7. }


控制器里调用

  1. <td style="text-indent:<{$vo['Count']*20}>px;"><neq name="vo.Count" value="1">| -- </neq><{$vo.Name}></td>


模板使用里<volist> 正常输出即可 把需要生成树结构的字段 修改成如上


测试了 如果是3000条的话 用时 0.5秒 1000个的话 0.02秒的左右 超过3000效率就会大幅度降低 2000左右的效率还是比较高的 没有进行更详细的测试

最新文章

  1. Java开发环境搭建——CentOS配置
  2. PowerDesigner自增列问题
  3. HTML静态网页导航制作
  4. python(五)文件操作
  5. BugTracker 功能说明(有图有真相)
  6. Basler usb SDK安装在opencv采集图像
  7. js执行上下文(由浅入深)
  8. Hyper-V性能-CPU分配
  9. 富文本 Htmll类 html标签
  10. css基本框架
  11. 【Tomcat源码学习】-3.应用管理
  12. coreCLR系列随笔 之ClrJit项目之alloc.cpp文件分析(1)
  13. Ionic2生成的main.js执行时间10s+
  14. .net 用ajaxFileUpload 上传超过20M文件设置
  15. Jupyter Notebook默认工作路径的修改
  16. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 树形选择项目的标准例子
  17. wget整站抓取、网站抓取功能;下载整个网站;下载网站到本地
  18. iOS证书说明和发布
  19. js的轮播效果
  20. 【内核】几个重要的linux内核文件

热门文章

  1. 《C++ Primer Plus》16.1 string类 学习笔记
  2. JSP基本用法(二)隐含对象
  3. 【HubbleDotNet】HubbleDotNet配置安装注册key获取
  4. c++11 delete禁用函数
  5. 布式实时日志系统(三) 环境搭建之centos 6.4下hadoop 2.5.2完全分布式集群搭建最全资料
  6. JS笔记 - JQ事件委托( 适用于给动态生成的脚本元素添加事件)
  7. u-boot.lds文件简介
  8. 生产环境mysql的参数设置不一样,好好的程序,又出错
  9. php5.4 traits
  10. 【JAVA】猜数字