Heim >php教程 >php手册 >10行代码搞定 无限级分类 正常输出 效率极高

10行代码搞定 无限级分类 正常输出 效率极高

WBOY
WBOYOriginal
2016-06-07 11:44:571209Durchsuche

超级无限分类 使用简单 效率极高 核心代码10行不到
另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^

效果图
10行代码搞定 无限级分类 正常输出 效率极高
核心代码如下class Tool {<br>     static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空<br>     /**<br>      * 无限级分类<br>      * @access public <br>      * @param Array $data     //数据库里获取的结果集 <br>      * @param Int $pid             <br>      * @param Int $count       //第几级分类<br>      * @return Array $treeList   <br>      */<br>     static public function tree(&$data,$pid = 0,$count = 1) {<br>         foreach ($data as $key => $value){<br>             if($value['Pid']==$pid){<br>                 $value['Count'] = $count;<br>                 self::$treeList []=$value;<br>                 unset($data[$key]);<br>                 self::tree($data,$value['Id'],$count+1);<br>             } <br>         }<br>         return self::$treeList ;<br>     }<br>     <br> }$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


    //默认列表<br>     public function index() {    <br>         $menu = M('Menu');<br>         $list = $menu->order('<b>Pid ASC</b>,Morder DESC,Id ASC')->select();<br>         <b>$this->assign('List',Tool::tree($list));</b>    <br>                  $this->display();<br>     }控制器里调用       <td>px;"><neq>| -- </neq> </td>模板使用里 正常输出即可 把需要生成树结构的字段 修改成如上

刚学ThinkPHP二个星期 第一次发代码 嘿嘿

测试了 如果是3000条的话 用时 0.5秒 1000个的话 0.02秒的左右 超过3000效率就会大幅度降低 2000左右的效率还是比较高的 没有进行更详细的测试
如果哪位大哥测试了 麻烦把测试结果回复下哈

我的QQ:390391483 山 治

AD:真正免费,域名+虚机+企业邮箱=0元

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn