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之第六天
Oct 09 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
Sep 11 PHP
php数字游戏 计算24算法
Jun 10 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
PHP制作万年历
Jan 07 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 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二分法查找数组是否包含某一元素
2013/05/23 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
详解JS面向对象编程
2016/01/24 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
PyTorch-GPU加速实例
2020/06/23 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
Jar包的作用是什么
2014/03/30 面试题
怎样声明接口
2014/09/19 面试题
上海微创软件面试题
2012/06/14 面试题
2014年教学工作总结
2014/11/13 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
员工辞职信怎么写
2015/02/27 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS