Heim >php教程 >php手册 >三级分类递归操作(通用方法)

三级分类递归操作(通用方法)

WBOY
WBOYOriginal
2016-06-07 11:35:032178Durchsuche

无论是商城前台还是后台总是有分类的递归操作是最常用的方法
在某个Model里面建立以下函数,方便在Controller里面直接调用,这种方法适用于最多三级分类,其实无限极分类现在的项目很少用到。class MenuModel extends Model {<br>     /**<br>      * 取分类列表,最多为三级<br>      * @param int $show_deep 显示深度<br>      * @param array $condition 检索条件<br>      * @return array 数组类型的返回结果<br>      */<br>     public function getTreeClassList($show_deep='3',$condition=array()){<br>         //获取所有的分类<br>         $class_list = $this->getGoodsClassList($condition);<br>         // p($class_list);die;<br>         $goods_class = array();//分类数组<br>         if(is_array($class_list) && !empty($class_list)) {<br>             $show_deep = intval($show_deep);<br>             if ($show_deep == 1){//只显示第一级时用循环给分类加上深度deep号码<br>                 foreach ($class_list as $val) {<br>                     if($val['parent_id'] == 0) {<br>                         $val['deep'] = 1;<br>                         $goods_class[] = $val;<br>                     } else {<br>                         break;//父类编号不为0时退出循环<br>                     }<br>                 }<br>             } else {//显示第二和三级时用递归<br>                 $goods_class = $this->_getTreeClassList($show_deep,$class_list);<br>             }<br>         }<br>         return $goods_class;<br>     }<br>      /**<br>      * 所有分类列表<br>      * @param  array   $condition  检索条件<br>      * @return array   返回二位数组<br>      */<br>     public function getGoodsClassList($condition, $field = '*') {<br>         $result = $this->field($field)->where($condition)->order('parent_id asc,sort asc,id asc')->select();<br>         return $result;<br>     }<br>     /**<br>      * 递归 整理分类<br>      *<br>      * @param int $show_deep 显示深度<br>      * @param array $class_list 类别内容集合<br>      * @param int $deep 深度<br>      * @param int $parent_id 父类编号<br>      * @param int $i 上次循环编号<br>      * @return array $show_class 返回数组形式的查询结果<br>      */<br>     private function _getTreeClassList($show_deep,$class_list,$deep=1,$parent_id=0,$i=0){<br>         static $show_class = array();//树状的平行数组<br>         if(is_array($class_list) && !empty($class_list)) {<br>             $size = count($class_list);<br>             if($i == 0) $show_class = array();//从0开始时清空数组,防止多次调用后出现重复<br>             for ($i;$i                  $val = $class_list[$i];<br>                 $gc_id = $val['id'];<br>                 $gc_parent_id    = $val['parent_id'];<br>                 if($gc_parent_id == $parent_id) {<br>                     $val['deep'] = $deep;<br>                     $show_class[] = $val;<br>                     if($deep                          $this->_getTreeClassList($show_deep,$class_list,$deep+1,$gc_id,$i+1);<br>                     }<br>                 }<br>                 if($gc_parent_id > $parent_id) break;//当前分类的父编号大于本次递归的时退出循环<br>             }<br>         }<br>         return $show_class;<br>     }<br> }然后在控制器里面直接调用public function index(){<br>     $parent_list =D('Menu')->getTreeClassList(3);<br>     //在模板中输出层级关系<br>     $gc_list = array();<br>     if (is_array($parent_list)){<br>     foreach ($parent_list as $k => $v){<br>         $parent_list[$k]['name'] = str_repeat(" ",$v['deep']*2).$v['name'];<br>             if($v['deep'] == 1) $gc_list[$k] = $v;<br>     }<br>     }<br> }

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