CMSPRESS 10行代码搞定 PHP无限级分类2
超级无限分类使用简单效率极高核心代码10行不到
另外求这个分类的不足,和更高效简单的无限分类方法^_^
核心代码如下
classTool{ staticpublic$treeList=array();//存放无限分类结果如果一页面有多个无限分类可以使用Tool::$treeList=array();清空 /** *无限级分类 *@accesspublic *@paramArray$data//数据库里获取的结果集 *@paramInt$pid *@paramInt$count//第几级分类 *@returnArray$treeList */ staticpublicfunctiontree(&$data,$pid=0,$count=1){ foreach($dataas$key=>$value){ if($value['Pid']==$pid){ $value['Count']=$count; self::$treeList[]=$value; unset($data[$key]); self::tree($data,$value['Id'],$count+1); } } returnself::$treeList; } }
$treeList[]保存排序的结果基本就是进行了一次排序保存后就可以unset($data[$key]);掉因为已经使用不到了
&$data使用按地址传参,结合unset($data[$key]);减少循环次数,这样效率提高了好几倍,
但需要对Pid进行ASC的排序不然会显示不完全
$value['Count']=$count;为当前的等级在模板里会通过等级进行生成树形结构
排序前后的数据结构如下
表所需要字段Id,Pid
排序前的数据结构
idpid
10
20
31
43
排序后的数据结构
idpidcount
101
312
433
201
//默认列表 publicfunctionindex(){ $menu=M('Menu'); $list=$menu->order('PidASC,MorderDESC,IdASC')->select(); $this->assign('List',Tool::tree($list)); $this->display(); }
控制器里调用
模板使用里
测试了如果是3000条的话用时0.5秒1000个的话0.02秒的左右超过3000效率就会大幅度降低2000左右的效率还是比较高的没有进行更详细的测试
如果哪位大哥测试了麻烦把测试结果回复下哈