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 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
PHP 采集程序 常用函数
Dec 18 PHP
php zip文件解压类代码
Dec 02 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 PHP
php有道翻译api调用方法实例
Dec 22 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 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使用openssl扩展实现加解密方法示例
2020/02/20 PHP
js中回调函数的学习笔记
2014/07/31 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
Python中使用SAX解析xml实例
2014/11/21 Python
Python实现测试磁盘性能的方法
2015/03/12 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
python绘制简单彩虹图
2018/11/19 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
物流管理专业职业生涯规划书
2014/01/06 职场文书
中学生英语演讲稿
2014/04/26 职场文书
邀请函样本
2015/02/02 职场文书
辩论会主持词
2015/07/03 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python