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 Zip压缩 在线对文件进行压缩的函数
May 26 PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
PHP @ at 记号的作用示例介绍
Oct 10 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
May 13 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 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 开源AJAX框架14种
2009/08/24 PHP
PHP开发负载均衡指南
2010/07/17 PHP
php 数组的一个悲剧?
2011/05/11 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
python中xrange用法分析
2015/04/15 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
对Python函数设计规范详解
2019/07/19 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
如何用python写个模板引擎
2021/01/14 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
计算机操作自荐信
2013/12/07 职场文书
初中英语教学反思
2014/01/25 职场文书
岗位说明书范文
2014/05/07 职场文书
政府会议通知范文
2015/04/15 职场文书
执行力心得体会范文
2016/01/11 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python