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左右的效率还是比较高的没有进行更详细的测试
如果哪位大哥测试了麻烦把测试结果回复下哈