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实现多服务器共享SESSION数据的方法
Mar 16 PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
PHP 字符串 小常识
Jun 05 PHP
php max_execution_time执行时间问题
Jul 17 PHP
PHP语法小结之基础和变量
Nov 22 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP中Array相关函数简介
Jul 03 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
PHP实现考试倒计时功能代码
Apr 16 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 cli 方式 在crotab中运行解决
2010/02/08 PHP
php的字符串用法小结
2010/06/08 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
JavaScript Sort 表格排序
2009/10/31 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
Python标准库defaultdict模块使用示例
2015/04/28 Python
python之Character string(实例讲解)
2017/09/25 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
秋季运动会稿件
2014/01/30 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python