Home  >  Article  >  php教程  >  如何提高php无限分类查询的效率(使用数组和递归)

如何提高php无限分类查询的效率(使用数组和递归)

WBOY
WBOYOriginal
2016-06-07 11:40:251244browse

如何提高php无限分类查询的效率(使用数组和递归)
<?php <br /> class Tree {<br>     /**<br>      * 从数据库查询出的所有分类信息<br>      * @var array<br>      * by:bbs.it-home.org<br>      */<br>     var $arr;<br>     /**<br>      * 如下格式<br>      * var $arr = array(<br>      1 => array(‘id’=>’1′,’parentid’=>0,’name’=>’一级栏目一’),<br>      2 => array(‘id’=>’2′,’parentid’=>0,’name’=>’一级栏目二’),<br>      3 => array(‘id’=>’3′,’parentid’=>1,’name’=>’二级栏目一’),<br>      );*/<br>     /**<br>      * 输出结构<br>      * @var array<br>      */<br>     var $tree = array();<br>     /**<br>      * 树形递归的深度<br>      * @var int<br>      */<br>     var $deep = 1;<br>     /**<br>      * 生成树形的修饰符号<br>      * @var array<br>      */<br>     var $icon = array('│','├','└');<br>     /**<br>      * 生成指定id的下级树形结构<br>      * @param int $rootid 要获取树形结构的id<br>      * @param string $add 递归中使用的前缀<br>      * @param bool $parent_end 标识上级分类是否是最后一个<br>      */<br>     function getTree($rootid = 0,$add = "",$parent_end =true){<br>         $is_top = 1;<br>         $child_arr = $this->getChild($rootid);<br>         if(is_array($child_arr)){<br>             $cnt = count($child_arr);<br>             foreach($child_arr as $key => $child){<br>                 $cid = $child['id'];<br>                 $child_child = $this->getChild($cid);<br>                 if($this->deep >1){<br>                     if($is_top == 1 && $this->deep > 1){<br>                         $space = $this->icon[1];<br>                         if(!$parent_end)<br>                         $add .= $this->icon[0];<br>                         else $add .= "";<br>                     }<br>                     if($is_top == $cnt){<br>                         $space = $this->icon[2];<br>                         $parent_end = true;<br>                     }else {<br>                         $space = $this->icon[1];<br>                         $parent_end = false;<br>                     }<br>                 }<br>                 $this->tree[] = array(‘spacer’=>$add.$k.$space,<br>                 ‘name’=>$child['name'],<br>                 ‘id’=>$cid<br>                 );<br>                 $is_top++;<br>                 $this->deep++;<br>                 if($this->getChild($cid))<br>                 $this->getTree($cid,$add,$parent_end);<br>                 $this->deep–;<br>             }<br>         }<br>         return $this->tree;<br>     }<br>     /**<br>      * 获取下级分类数组<br>      * @param int $root<br>      */<br>     function getChild($root = 0){<br>         $a = $child = array();<br>         foreach($this->arr as $id=>$a){<br>             if($a['parentid'] == $root){<br>                 $child[$a['id']] = $a;<br>             }<br>         }<br>         return $child?$child:false;<br>     }<br>     /**<br>      * 设置源数组<br>      * @param $arr<br>      */<br>     function setArr($arr = array()){<br>         $this->arr = $arr;<br>     }<br> }<br> ?><br>  通过一次查询把结构保存进一个数组,再数组进行递归运算,无疑极大的提高了程序运行效率。 代码的使用很简单:得到查询结构后setArr,直接调用getTree, 皆可以得到按照程序排序号并带有前缀修饰等信息的数组。通过foreach这个数组可以得到如下的树状列表: 水果 ├香蕉 ├苹果 │├红富士 │└海南苹果 └桃子 记住:网站开发过程中,多数的瓶颈在数据库,而非php代码。
以上案例转载地址:http://www.jb100.net/html/content-22-641-1.html

希望这个案例能帮到大家,有需要的朋友可以参考一下。

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn