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 相关文章推荐
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
PHP输出日历表代码实例
Mar 27 PHP
PHP异常处理Exception类
Dec 11 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
php similar_text()函数的定义和用法
May 12 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
php intval函数用法总结
Apr 14 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
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高级OOP技术演示
2009/08/27 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
js实现分割上传大文件
2016/03/09 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
Python深入学习之装饰器
2014/08/31 Python
Python字符串切片操作知识详解
2016/03/28 Python
python开发简易版在线音乐播放器
2017/03/03 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
业务代表的岗位职责
2013/11/16 职场文书
交通法规咨询中心工作职责
2013/11/27 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
毕业实习评语
2014/02/10 职场文书
如何写求职信
2014/05/24 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
《春酒》教学反思
2016/02/22 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
Java数据结构之堆(优先队列)
2022/05/20 Java/Android