通常來講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; }