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应用技巧
Mar 27 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
PHP入门之常量简介和系统常量
May 12 PHP
PHP可变函数学习小结
Nov 29 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
php如何实现数据库的备份和恢复
Nov 30 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
将PHP作为Shell脚本语言使用
2006/10/09 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
php cookie 详解使用实例
2016/11/03 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
jQuery搜索同辈元素方法
2015/02/10 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
python对文件目录的操作方法实例总结
2019/06/24 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
大专生毕业的自我评价
2014/02/06 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
房屋继承公证书
2014/04/10 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
工程索赔意向书
2014/08/30 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript
Python基础详解之描述符
2021/04/28 Python
完美解决golang go get私有仓库的问题
2021/05/05 Golang