原文章地址: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左右的效率还是比较高的 没有进行更详细的测试

CMSPRESS-PHP无限级分类2的更多相关文章

  1. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  2. 一道无限级分类题的 PHP 实现

    今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ( ...

  3. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  4. php利用递归函数实现无限级分类

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是 ...

  5. PHP+MySQL无限级分类(非递归)

    要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 字段 说明 ...

  6. PHP无限级分类-递归(不推荐)

    [http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...

  7. PHP无限级分类生成树实例代码

    分享一例php无限级分类生成树的代码,学习下php无限级分类的实现方法,有需要的朋友参考下.   一段非常精简的PHP无限极分类生成树方法,巧在引用.   例子,php实现无限级分类.   代码示例: ...

  8. php非递归无限级分类.

    项目需要.递归无限级分类效率实在太低.理了半天思路写的. 分类越多效率越高. /** * 单次循环返回无限极分类嵌套 * @param array $data 操作的数组 * @param strin ...

  9. 转:php+mysql菜单无限级分类(非递归)

    php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244

  10. SQL 无限级分类语句

    原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...

随机推荐

  1. 13条Android手机必备技巧 让玩机更有趣

    腾讯数码讯(编译:张秀梅)如果你不是一名极客或手机爱好者,那么或许对于手中的Android手机来说,肯定无法做到百分之百了解.对于这款世界上最受欢迎的操作系统来说,有许多不为大部分人所知晓的使用技巧或 ...

  2. 【python】解决No module named _sqlite3的问题

    环境版本说明: centos 7 python3.6.4 django 2.0 在创建django项目时候.报错以下信息 详细错误信息如下: 原因: 未安装sqlite 模块 解决: 1 安装 sql ...

  3. phpstorm10激活加汉化

    所用到的文件:链接:http://pan.baidu.com/s/1boNqCcJ 密码:61nz 分享文件夹中,有一个“PHP Storm激活和汉化方法.zip”文件其中有一个“resources_ ...

  4. rpm包安装失败的解决办法

    author: headsen  chen date :  2018-10-15  14:24:36 1,故障现象: # rpm -ivh zabbix-agent--.el6.x86_64.rpm ...

  5. 【OOP】C++ const成员函数

    预备知识 1.代码转换分析技巧 在早期某些编译器会将C++代码翻译为C代码,然后使用C编译器生成可执行文件.其中翻译的一个转化就是:将this指针显式添加到成员函数的第一个参数位置上,并在成员函数调用 ...

  6. 【CF932G】Palindrome Partition 回文自动机

    [CF932G]Palindrome Partition 题意:给你一个字符串s,问你有多少种方式,可以将s分割成k个子串,设k个子串是$x_1x_2...x_k$,满足$x_1=x_k,x_2=x_ ...

  7. Python - 3MySQL 数据库连接

    Python3 MySQL 数据库连接 本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查. 什么是 PyMySQL? PyMySQL 是在 Python3.x ...

  8. python模块路径

    Python会在以下路径中搜索它想要寻找的模块: 1. 程序所在的文件夹 2. 标准库的安装路径 3. 操作系统环境变量PYTHONPATH所包含的路径 将自定义库的路径添加到Python的库路径中去 ...

  9. 9.12DjangoORM回顾和路由.

    2018-9-12 13:44:41 周末继续整理一下博客!不知不觉记了好多! 越努力越幸运! 永远不要高估自己! 关于反射的复习 # /usr/bin/env python # -*- coding ...

  10. opencv学习笔记——cv::mean()函数详解

    opencv中封装了一个专门用于求解cv::Mat均值的函数,即cv::mean(&cv::Mat),该函数会得到Mat中各个通道的均值,若要获取指定通道的均值,做进一步解析即可. 具体使用方 ...