无限极分类,用的是递归,在外部调用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处理,
这样的效率才会高