佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > PHP利用遞歸函數(shù)實現(xiàn)無限級分類的方法

PHP利用遞歸函數(shù)實現(xiàn)無限級分類的方法

熱門標(biāo)簽:銀行業(yè)務(wù) 電子圍欄 Linux服務(wù)器 Mysql連接數(shù)設(shè)置 服務(wù)器配置 科大訊飛語音識別系統(tǒng) 團(tuán)購網(wǎng)站 阿里云

相信很多學(xué)php的很多小伙伴都會嘗試做一個網(wǎng)上商城作為提升自己技術(shù)的一種途徑。各種對商品分類,商品名之類的操作應(yīng)該是得心應(yīng)手,那么就可以嘗試下無限級分類列表的制作了。

什么是無限級分類?

無限級分類是一種分類技巧,例如部門組織,文章分類,學(xué)科分類等常用到無限級分類,將其簡單理解成分類就好了。其實我們仔細(xì)想一下,生活中的分類簡直太多了,衣服可以分為男裝和女裝,也可以分為上衣和褲子,也可以根據(jù)年齡段分類。分類無處不在,分類顯得“無限”。我這里就不說無限分類的必要性了。

無限級分類原理簡介

無限分類看似"高大上",實際上原理是非常簡單的 。無限分類不僅僅需要代碼的巧妙性,也要依托數(shù)據(jù)庫設(shè)計的合理性。要滿足無限級分類,數(shù)據(jù)庫需要有兩個必須的字段,id,pid。id用來標(biāo)識自身,而pid則是用來表明父級id。也就是說,每個分類記錄不僅描述了自身,還描述了與其關(guān)心最為緊密的另一個id??此茝?fù)雜的事情被這樣一個小技巧解決了。

php無限級分類是經(jīng)常要用到的,本人以前一直用的是已經(jīng)寫好的,所以沒仔細(xì)去研究過,下面是一個使用遞歸實現(xiàn)的簡單的php無限級分類的函數(shù);也許這不是最優(yōu)的方法,但對于一般的應(yīng)用也足夠了。

數(shù)據(jù)表結(jié)構(gòu)

CREATE TABLE IF NOT EXISTS `category` (
 `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '唯一自增id',
 `pid` int(5) NOT NULL DEFAULT '0' COMMENT '父id',
 `sort` int(2) NOT NULL DEFAULT '0' COMMENT '排序數(shù)字',
 `name` varchar(30) DEFAULT NULL COMMENT '名稱',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='無限極分類表' AUTO_INCREMENT=1 ;

數(shù)據(jù)

INSERT INTO `category` (`id`, `pid`, `sort`, `name`) VALUES
(1, 0, 1, 'php'),
(2, 0, 2, '數(shù)據(jù)庫'),
(3, 0, 3, 'javascript'),
(4, 1, 1, '框架模板'),
(5, 1, 2, '函數(shù)總結(jié)'),
(6, 2, 1, 'mysql'),
(7, 4, 1, '框架'),
(8, 4, 2, '模板'),
(9, 8, 1, 'smarty'),
(10, 7, 2, 'thinkphp'),
(11, 10, 1, 'thinkphp技巧'),
(12, 10, 2, 'thinkphp模板'),
(13, 12, 3, '模板知識總結(jié)'),
(14, 12, 2, '模板視頻教程'),
(15, 11, 1, 'model技巧');

函數(shù)實現(xiàn)代碼

function tree($list,$pid=0,$level=0,$html='--'){
  static $tree=array();
  foreach($list as $v){
    if($v['pid']==$pid){
      $v['level']=$level;
      $v['html']=str_repeat($html,$level);
      $tree[]=$v;
      tree($list,$v['id'],$level+1,$html);
    } 
  }
  return $tree;
}

以上tree函數(shù)的第一個參數(shù)$list就是獲取的如上表的一個二維數(shù)組的結(jié)果集。需要注意的是從數(shù)據(jù)庫獲取結(jié)果集的sql語句必須加上order by sort asc,否則sort字段將不能發(fā)揮排序的作用。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • php求斐波那契數(shù)的兩種實現(xiàn)方式【遞歸與遞推】
  • php菜單/評論數(shù)據(jù)遞歸分級算法的實現(xiàn)方法
  • PHP實現(xiàn)無限極分類的兩種方式示例【遞歸和引用方式】
  • PHP自定義遞歸函數(shù)實現(xiàn)數(shù)組轉(zhuǎn)JSON功能【支持GBK編碼】
  • PHP遞歸寫入MySQL實現(xiàn)無限級分類數(shù)據(jù)操作示例
  • PHP數(shù)組遞歸排序?qū)崿F(xiàn)方法示例
  • PHP迭代與遞歸實現(xiàn)無限級分類
  • PHP實現(xiàn)遞歸的三種方法

標(biāo)簽:大理 衡水 江蘇 衢州 蚌埠 廣元 萍鄉(xiāng) 棗莊

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP利用遞歸函數(shù)實現(xiàn)無限級分類的方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    高碑店市| 霞浦县| 栖霞市| 安宁市| 中卫市| 罗源县| 盐山县| 宣化县| 锡林浩特市| 黑山县| 革吉县| 上饶市| 新巴尔虎右旗| 温宿县| 宁安市| 安乡县| 山阴县| 新河县| 青神县| 叶城县| 乐业县| 宾阳县| 会泽县| 三台县| 北海市| 石棉县| 延津县| 凤台县| 长宁区| 佛教| 蓬溪县| 商河县| 尚义县| 聂荣县| 阳信县| 尤溪县| 黔南| 闽清县| 合阳县| 扬州市| 兴宁市|