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 相关文章推荐
adodb与adodb_lite之比较
Dec 31 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 PHP
关于PHP语言构造器介绍
Jul 08 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
php使用curl实现ftp文件下载功能
May 16 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
PHP日志LOG类定义与用法示例
Sep 06 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
我的论坛源代码(八)
2006/10/09 PHP
oracle资料库函式库
2006/10/09 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
详解PHP中的PDO类
2015/07/06 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
2018/06/28 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
python处理二进制数据的方法
2015/06/03 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
Django保护敏感信息的方法示例
2019/05/09 Python
django 单表操作实例详解
2019/07/30 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python爬虫与反爬虫大战
2020/07/30 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
医学专业大学生求职的自我评价
2013/11/27 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
民事授权委托书范文
2014/08/02 职场文书
公司年会开场白
2015/06/01 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
羊脂球读书笔记
2015/06/30 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python