• 售前

  • 售后

热门帖子
入门百科

CMSPRESS 10行代码搞定 PHP无穷级分类2

[复制链接]
自在山高 显示全部楼层 发表于 2021-10-25 19:06:02 |阅读模式 打印 上一主题 下一主题
超等无穷分类 使用简单 效率极高 焦点代码10行不到
别的 求这个分类的不足,和更高效简单的无穷分类方法 ^_^

焦点代码如下
  1. class Tool {
  2.   static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空
  3.   /**
  4.    * 无限级分类
  5.    * @access public
  6.    * @param Array $data   //数据库里获取的结果集
  7.    * @param Int $pid      
  8.    * @param Int $count    //第几级分类
  9.    * @return Array $treeList  
  10.    */
  11.   static public function tree(&$data,$pid = 0,$count = 1) {
  12.     foreach ($data as $key => $value){
  13.       if($value['Pid']==$pid){
  14.         $value['Count'] = $count;
  15.         self::$treeList []=$value;
  16.         unset($data[$key]);
  17.         self::tree($data,$value['Id'],$count+1);
  18.       }
  19.     }
  20.     return self::$treeList ;
  21.   }  
  22. }
复制代码
$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
  1. //默认列表
  2.   public function index() {  
  3.     $menu = M('Menu');
  4.     $list = $menu->order('Pid ASC,Morder DESC,Id ASC')->select();
  5.     $this->assign('List',Tool::tree($list));  
  6.          $this->display();
  7.   }
复制代码
控制器里调用
<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左右的效率还是比力高的 没有进行更详细的测试
如果哪位大哥测试了 贫苦把测试结果回复下哈

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作