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设计模式 Visitor 访问者模式
Jun 28 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
PHP中的use关键字概述
Jul 23 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP也能干大事 随机函数
Apr 14 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
php post json参数的传递和接收处理方法
May 31 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
PHP正则表达式之RCEService回溯
Apr 11 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
JAVA/JSP学习系列之六
2006/10/09 PHP
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
PHP伪造referer实例代码
2008/09/20 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
python 实现Harris角点检测算法
2020/12/11 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
《再见了,亲人》教学反思
2014/02/26 职场文书
团日活动总结范文
2014/04/25 职场文书
企业承诺书怎么写
2014/05/24 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
委托书怎样写
2014/08/30 职场文书
史上最牛的辞职信
2015/02/28 职场文书
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js