CMSPRESS 10行代码搞定 PHP无限级分类2


Posted in PHP onMarch 30, 2018

超级无限分类 使用简单 效率极高 核心代码10行不到
另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^

核心代码如下

class Tool {
  static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空
  /**
   * 无限级分类
   * @access public 
   * @param Array $data   //数据库里获取的结果集 
   * @param Int $pid       
   * @param Int $count    //第几级分类
   * @return Array $treeList  
   */
  static public function tree(&$data,$pid = 0,$count = 1) {
    foreach ($data as $key => $value){
      if($value['Pid']==$pid){
        $value['Count'] = $count;
        self::$treeList []=$value;
        unset($data[$key]);
        self::tree($data,$value['Id'],$count+1);
      } 
    }
    return self::$treeList ;
  }  
}

$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

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

控制器里调用

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

如果哪位大哥测试了 麻烦把测试结果回复下哈

PHP 相关文章推荐
玩转图像函数库―常见图形操作
Sep 03 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
php 获取可变函数参数的函数
Aug 26 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
php文件夹的创建与删除方法
Jan 24 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
php生成图片验证码-附五种验证码
Aug 19 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
PHP简单实现无限级分类的方法
May 13 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 #PHP
PHP实现动态添加XML中数据的方法
Mar 30 #PHP
PHP实现动态创建XML文档的方法
Mar 30 #PHP
php实现微信模板消息推送
Mar 30 #PHP
Mac系统下安装PHP Xdebug
Mar 30 #PHP
php实现websocket实时消息推送
Mar 30 #PHP
总结PHP内存释放以及垃圾回收
Mar 29 #PHP
You might like
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
原生js实现轮播图
2017/02/27 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
jQuery实现简单QQ聊天框
2020/08/27 jQuery
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
汉森批发:Hansen Wholesale
2018/05/24 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
Delphi工程师笔试题
2013/09/21 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
倡议书范文大全
2015/04/28 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL