分类——PHP无限级分类

通常来讲php递归实现无限级分类技术,多应用与分类导航。php

什么是递归:sql

程序调用自身的编程技巧就叫递归。注意在函数调用自身必需要有条件,不然就是无限循环。thinkphp

function sort($pid)
{
  ...
  if($row)
  { 
    sort($pid);
  }
  ...
  return $result;
}

在实现递归应该对返回值$result进行设置,否则返回值会丢失:编程

一、$_GLOBALS[result]框架

二、static $result函数

三、参数引用 &thinkphp5

递归无线分类原理:this

每个分类都须要记录它的父级id,当为顶级分类时,父级id为0.这样不管哪一个分类,均可以经过父级id 一层层去查明它全部的父级,从而清楚它属于何种分类,层级深度为几。spa

数据表设计设计

CREATE TABLE IF NOT EXISTS `cate`(
  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `pid`mediumint(7) NOT NULL COMMENT '父级id',
  `catename` varchar(30) NOT NULL COMMENT '分类名',
  `sort` int(10) NOT NULL COMMENT '排序',
  PRAMARY `id`
)ENGINE=MYISAM DEFAULT CHARSET=utf8;

部分代码实现:基于thinkphp5.0框架下实现

public function sortCate()
    {
        $dataDb=$this->select();
        return $this->sort($dataDb);  //调用sort()排序方法,对查询的数据进行排序
    }
    //sort()排序方法:无限极分类递归
    public function sort($dataDb,$pid=0,$level=0) //将$pid和level默认设置为0开始
    {
        static $arr = array();
        foreach ($dataDb as $k => $v) {
            if ($v['pid'] == $pid) {
                $v['level'] = $level;
                $arr[] = $v;
                $this->sort($dataDb, $v['id'], $level + 1); //递归函数:执行本身
            }
        }
        return $arr;
    }
相关文章
相关标签/搜索