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的配置文件php.ini
Oct 09 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
分享一个漂亮的php验证码类
Sep 29 PHP
php数据序列化测试实例详解
Aug 12 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
php模拟post提交请求调用接口示例解析
Aug 07 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
PHP7 错误处理机制修改
2021/03/09 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
深入了解JavaScript词法作用域
2020/07/29 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
python操作MongoDB基础知识
2013/11/01 Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python实现的重启关机程序实例
2014/08/21 Python
Python解析nginx日志文件
2015/05/11 Python
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
Python获取当前路径实现代码
2017/05/08 Python
python读取xlsx的方法
2018/12/25 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
物理教师自荐信范文
2013/12/28 职场文书
学生感冒英文请假条
2014/02/04 职场文书
中学生自我鉴定
2014/02/04 职场文书
春季运动会开幕词
2015/01/28 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Python下opencv库的安装过程及问题汇总
2021/06/11 Python