分類——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;
    }
相關文章
相關標籤/搜索