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 相关文章推荐
php连接mysql数据库代码
Mar 10 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
PHP使用Pear发送邮件(Windows环境)
Jan 05 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 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
基于mysql的bbs设计(一)
2006/10/09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php 文章采集正则代码
2009/12/28 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
Zookeeper接口kazoo实例解析
2018/01/22 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
在python中使用nohup命令说明
2020/04/16 Python
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
毕业留言寄语大全
2014/04/10 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
2014年招商工作总结
2014/11/22 职场文书
投资意向协议书
2015/01/29 职场文书
电工生产实习心得体会
2016/01/22 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
Element实现动态表格的示例代码
2021/08/02 Javascript