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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
WordPress自定义时间显示格式
Mar 27 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
php字符串的替换,分割和连接方法
May 23 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
php7 新增功能实例总结
May 25 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
JS记录用户登录次数实现代码
2014/01/15 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
javascript常见操作汇总
2014/09/03 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
vue中将html字符串转换成html后遇到的问题小结
2018/12/10 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
Django中使用group_by的方法
2015/05/26 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
Internet体系结构
2014/12/21 面试题
实习鉴定评语
2014/01/19 职场文书
校运会入场式解说词
2014/02/10 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers