PHP 商城无限极分类



无限极分类,用的是递归,在外部调用fen()方法即可
                index是刚开始寻找的顶级分类,suo是为了在前端展示的时候缩进
    public  function  fen($index=0,$suo=0){



        一个数组用来返回的
             $t=[];

             这是查询数据库的所有内容
        foreach($this->select() as $key=>$value)
        {

              
            if($value["parent_id"]==$p){
      如果说父级ID是刚开始默认的顶级分类的话,
             就给这个顶级分类的缩进设置为0
                $value["suo"]=$suo;



                  然后就是添加这个数组进刚开始定义的数组,下面两种添加方法都可以,我觉得push看的更加明白,
               //   $t[]=$value;
                array_push($t,$value);


                 然后就是递归了,传进去的第一个就是要查找的父级ID,就是当前的这个vlaue的cat_id,找出他下面的子分类,然后都是子分类缩进当然要加一个了.
                 为什么用合并呢,如果用push的话,如果这个分类没有子分类那么会添加进来一个空数组,
                  用合并的话,就会自动屏蔽空数组

             $t=array_merge($t,$this->fen($value["cat_id"],$v+1));

             //array_push($t,$this->fen($value["cat_id"],$v+1));
            }
        }

          最后循环结束,再把查到的递归进来的每个方法中的定义的数组给抛回去
        return $t;


    }


 
我用的是thinkPHP3.2 
我是把递归的方法写在模型里面的,
$this->assign("list",$this->gm->fen());
$this->display("type/catlist");

在Html里面,没有li的左外边距就是缩进的*40就OK,效果就出来了
<foreach name="list" item="item"> <li style="margin-left:{$item[suo]*40}px"> <span class="wl_suo">{$item.v}</span> {$item.cat_name} <span>上机ID{$item.parent_id}</span></li> </foreach>


但是后台的递归还是不好的方法,好的方法还是把这些数组用json的格式传给前台的js处理,
这样的效率才会高









原文地址:https://www.cnblogs.com/wlphp/p/8544604.html