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 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
php异常处理使用示例
Feb 25 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 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 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
python提取内容关键词的方法
2015/03/16 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python中的默认参数实例分析
2018/01/29 Python
python实现微信自动回复机器人功能
2019/07/11 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Python while true实现爬虫定时任务
2020/06/08 Python
python 下载文件的多种方法汇总
2020/11/17 Python
美国在线购物频道:Shop LC
2019/04/21 全球购物
文明家庭先进事迹材
2014/01/27 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
21岁生日感言
2014/02/27 职场文书
银行内勤岗位职责
2014/04/09 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
Python基础之Socket通信原理
2021/04/22 Python