PHP實現無限分類的實現方法

來源:互聯網
上載者:User
無限級分類是一種設計技巧,在開發中經常使用,本篇文章主要介紹PHP實現無限分類的實現方法,有需要的可以瞭解一下。

無限級分類是一種設計技巧,在開發中經常使用,例如:網站目錄、部門結構、文章分類。筆者覺得它在對於設計表的層級結構上面發揮很大的作用,比如大家在一些平台上面,

填寫邀請人,它就是一種上下級的關係,上級會有多個下級,下級又會有自己的分支,大多數都是利用遞迴的思想去實現。話不多說,首先來溫故一下遞迴的實現

遞迴(程式調用自身的編程技巧):

1、$_GLOBALS[result]

2、static $result

3、參數引用&

舉例:遍曆1-10

$i=0;function deeploop( $i ){  global $i;  $i++;  echo $i;  if( $i<10 ){    deeploop($i);  } } function deeploop( ){  static $i=0;  $i++;  echo $i;  if( $i<10 ){    deeploop($i);  } }  function deeploop( &$i=0 ){  $i++;  echo $i;  if( $i<10 ){    deeploop($i);  } }

一、無限分類實現:

1、表設計設定父id 頂級父id設為0 建立族譜樹;每一個分類都需記錄它的父級id。( pid=0 代表頂級 )

id pid catename cateorder createtime ( 主鍵id,父id,分類name,分類排序,建立時間)

舉例:網站的分類目錄結構;餐飲的分類結構;評論的結構

2、全路徑無限分類(以一個欄位將所有父級id按順序記錄下來)

id path catename cateorder createtime ( 主鍵id,逗號分隔的順序排列父id,分類name,分類排序,建立時間)

優缺點:

全路徑查詢方便;增加,移動分類時資料維護稍顯複雜;

二、舉例實現(網站目錄):

分類表:

 #父級Id遞迴法  CREATE TABLE `deepcate`(    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,    `pid` int(11) NOT NULL DEFAULT 0,    `catename` char(25) NOT NULL,    `cateorder` int(6) ,    `createtime` date  )ENGINE=INNODB default CHARSET=utf8;        //資料  INSERT INTO `deepcate` VALUES(1,0,'圖片',null,'2016-11-01'),                ( 2,1,'美女',null,'2016-11-01'),                ( 3,1,'新聞',null,'2016-11-01'),                ( 4,2,'足球寶貝',null,'2016-11-01'),                ( 5,2,'日韓明星',null,'2016-11-01'),                ( 6,5,'美女寫真',null,'2016-11-01');                   #全路徑  CREATE TABLE `qljcate` (    `id` int(11) NOT NULL,    `path` char(255) ,    `catename` char(25) NOT NULL,    `cateorder` int(6),    `createtime` date  )ENGINE=INNODB default CHARSET=utf8;     INSERT INTO `qljcate` VALUES( 1,null,'圖片',null,'2016-11-01'),                ( 2,1,'美女圖片',null,'2016-11-01'),            ( 3,1,2,'足球寶貝',null,'2016-11-01'),                ( 4,1,2,'日韓明星',null,'2016-11-01'),                ( 5,1,2,4,'美女寫真',null,'2016-11-01');

擷取圖片所在的目錄路徑:

#父級Id遞迴法  CREATE TABLE `deepcate`(    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,    `pid` int(11) NOT NULL DEFAULT 0,    `catename` char(25) NOT NULL,    `cateorder` int(6) ,    `createtime` date  )ENGINE=INNODB default CHARSET=utf8;        //資料  INSERT INTO `deepcate` VALUES(1,0,'圖片',null,'2016-11-01'),                ( 2,1,'美女',null,'2016-11-01'),                ( 3,1,'新聞',null,'2016-11-01'),                ( 4,2,'足球寶貝',null,'2016-11-01'),                ( 5,2,'日韓明星',null,'2016-11-01'),                ( 6,5,'美女寫真',null,'2016-11-01');                   #全路徑  CREATE TABLE `qljcate` (    `id` int(11) NOT NULL,    `path` char(255) ,    `catename` char(25) NOT NULL,    `cateorder` int(6),    `createtime` date  )ENGINE=INNODB default CHARSET=utf8;     INSERT INTO `qljcate` VALUES( 1,null,'圖片',null,'2016-11-01'),                ( 2,1,'美女圖片',null,'2016-11-01'),            ( 3,1,2,'足球寶貝',null,'2016-11-01'),                ( 4,1,2,'日韓明星',null,'2016-11-01'),                ( 5,1,2,4,'美女寫真',null,'2016-11-01');

*注意點:

移動分類不能移到自己及其子類下面;刪除分類 (只能刪除最底層的分類,及不含子類的分類;換言之,只能從最底層刪起).

思考圖片類型下所有的圖片分類?

 #pid 父級id實現法  function GetAllcate( $id,&$result=array() ){    $sql = "SELECT * FROM deepcate WHERE pid in ({$id})";    $query = mysql_query( $sql );    $row = mysql_fetch_assoc( $query );    if( mysql_num_rows($row)>0 )    {      $idlist = array();      while( $row ){        $result[] = $row;        $idlist[] = $row['id'];       }      $id = implode(',',$idlist);      GetAllcate( $id,$result );         }         $result = array_unique( $result );    return $result;  }

此類方法比較適用於查詢所在父分類下所有的書籍、文章。。。當然,全路徑可以直接擷取,就不再此提出了。

實際操作中,我們可以根據實際情況設計合理的表結構。

舉個執行個體,連鎖門店實現商品的管理,門店的賬戶設定就會存在上下級關係,根據代理點的分區可能存在這種下級擁有自己下級,那麼採用這種無限分類的方法就比較靈活面對這種關係體系,只需設定每個賬戶等級,就能對不同的門店設定許可權分配。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.