通常来讲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; }