热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP商城无限极分类

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

 

 



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










推荐阅读
author-avatar
xXxHolicxXx900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有