自己写的一个递归无限分类,简单易用,给大家分享!

#1 yuyu775

在model层 lib_catalog.php 中

//递归查询栏目分类列表
public function getCatalogList($id=0,$level=0)
    {
        $conditions = array('pid'=>$id);
        $results = $this->findAll($conditions);
        $catlist = array();
        for($i=0;$i < $level *2 - 1;$i++){
            $str .=" ";
        }
        if($level++){$str .= "┝";};
        foreach ($results as $cat){
            $id = $cat['cid'];
            $name = $str.$cat['cname'];
            $seq = $cat['seq'];
            $value = array('cid'=>$id,'cname'=>$name,'seq'=>$seq);
            $catlist[] = $value;
            $catlist = array_merge($catlist,$this->getCatalogList($id,$level));
        }
        return $catlist;
    }

在controller层 catalog.php 中

public function catalogList(){
    $catalogObj = spClass("lib_catalog");
    $this->results = $catalogObj->getCatalogList();
    //dump($this->results);
    $this->display("admin/catalog.html");
  }


Catalog 数据表结构

cid  主键   自动递增
pid  //父ID
cname // 栏目名称
seq //排列顺序

2010-07-01 17:47:36

#2 jake

楼上的代码演示了如何对多级的分类进行数据库的递归。

这里补充一下,要看情况来进行多级分类的递归。楼上的代码主要针对递归层数不深,但是同级分类数量较多的情况;另外还有一种方法是把分类数据全部读出来再行递归,这种方法适合递归层数比较深,但是同级分类并不多的情况。

2010-07-01 18:54:26

#3 xieguolun

seq //排列顺序是什么东东?

2011-12-28 21:54:23

#4 xieguolun

如果是两个表呢?

2011-12-28 22:18:31

#5 jiayan41

楼主这个代码写的非常简明易用

2012-01-29 16:31:17

#6 _六哥_

单表操作的吧

2012-01-31 09:30:41