PHP利用遞歸函數(shù)實(shí)現(xiàn)無限級(jí)分類的方法
相信很多學(xué)php的很多小伙伴都會(huì)嘗試做一個(gè)網(wǎng)上商城作為提升自己技術(shù)的一種途徑。各種對(duì)商品分類,商品名之類的操作應(yīng)該是得心應(yīng)手,那么就可以嘗試下無限級(jí)分類列表的制作了。
什么是無限級(jí)分類?
無限級(jí)分類是一種分類技巧,例如部門組織,文章分類,學(xué)科分類等常用到無限級(jí)分類,將其簡單理解成分類就好了。其實(shí)我們仔細(xì)想一下,生活中的分類簡直太多了,衣服可以分為男裝和女裝,也可以分為上衣和褲子,也可以根據(jù)年齡段分類。分類無處不在,分類顯得“無限”。我這里就不說無限分類的必要性了。
無限級(jí)分類原理簡介
無限分類看似"高大上",實(shí)際上原理是非常簡單的 。無限分類不僅僅需要代碼的巧妙性,也要依托數(shù)據(jù)庫設(shè)計(jì)的合理性。要滿足無限級(jí)分類,數(shù)據(jù)庫需要有兩個(gè)必須的字段,id,pid。id用來標(biāo)識(shí)自身,而pid則是用來表明父級(jí)id。也就是說,每個(gè)分類記錄不僅描述了自身,還描述了與其關(guān)心最為緊密的另一個(gè)id??此茝?fù)雜的事情被這樣一個(gè)小技巧解決了。
php無限級(jí)分類是經(jīng)常要用到的,本人以前一直用的是已經(jīng)寫好的,所以沒仔細(xì)去研究過,下面是一個(gè)使用遞歸實(shí)現(xiàn)的簡單的php無限級(jí)分類的函數(shù);也許這不是最優(yōu)的方法,但對(duì)于一般的應(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, '模板知識(shí)總結(jié)'), (14, 12, 2, '模板視頻教程'), (15, 11, 1, 'model技巧');
函數(shù)實(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ù)的第一個(gè)參數(shù)$list就是獲取的如上表的一個(gè)二維數(shù)組的結(jié)果集。需要注意的是從數(shù)據(jù)庫獲取結(jié)果集的sql語句必須加上order by sort asc,否則sort字段將不能發(fā)揮排序的作用。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- php求斐波那契數(shù)的兩種實(shí)現(xiàn)方式【遞歸與遞推】
- php菜單/評(píng)論數(shù)據(jù)遞歸分級(jí)算法的實(shí)現(xiàn)方法
- PHP實(shí)現(xiàn)無限極分類的兩種方式示例【遞歸和引用方式】
- PHP自定義遞歸函數(shù)實(shí)現(xiàn)數(shù)組轉(zhuǎn)JSON功能【支持GBK編碼】
- PHP遞歸寫入MySQL實(shí)現(xiàn)無限級(jí)分類數(shù)據(jù)操作示例
- PHP數(shù)組遞歸排序?qū)崿F(xiàn)方法示例
- PHP迭代與遞歸實(shí)現(xiàn)無限級(jí)分類
- PHP實(shí)現(xiàn)遞歸的三種方法
相關(guān)文章
PHP遞歸寫入MySQL實(shí)現(xiàn)無限級(jí)分類數(shù)據(jù)操作示例
這篇文章主要介紹了PHP遞歸寫入MySQL實(shí)現(xiàn)無限級(jí)分類數(shù)據(jù)操作,涉及mysql數(shù)據(jù)庫的創(chuàng)建以及php遞歸寫入、讀取數(shù)據(jù)庫分類相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
php中批量刪除Mysql中相同前綴的數(shù)據(jù)表的代碼
Mysql如何批量刪除相同前綴的數(shù)據(jù)表,原理就是讀取數(shù)據(jù)中的所有表,查找class_開頭的表,如果開頭是這個(gè),就刪除。2011-07-07
一個(gè)經(jīng)典實(shí)用的PHP圖像處理類分享
這篇文章主要介紹了一個(gè)經(jīng)典實(shí)用的PHP圖像處理類分享,本文提供的PHP圖像操作類可以滿足網(wǎng)站中的大部分功能需求,如圖片的縮放、加水印和裁剪等功能,需要的朋友可以參考下2014-11-11
PHP針對(duì)常規(guī)模板引擎中與CSS/JSON沖突的解決方法
這篇文章主要介紹了PHP針對(duì)常規(guī)模板引擎中與CSS/JSON沖突的解決方法,非常實(shí)用的技巧,需要的朋友可以參考下2014-08-08
微信公眾平臺(tái)開發(fā)教程②微信端分享功能圖文詳解
這篇文章主要介紹了微信公眾平臺(tái)開發(fā)微信端分享功能,結(jié)合圖文形式詳細(xì)分析了微信分享功能的原理、操作步驟及相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-04-04
淺析PHP數(shù)據(jù)導(dǎo)出知識(shí)點(diǎn)
本文是小編整理的關(guān)于PHP數(shù)據(jù)導(dǎo)出知識(shí)點(diǎn)的總結(jié)內(nèi)容,分析了經(jīng)常出現(xiàn)的問題,以及解決辦法,有興趣的朋友可以參考學(xué)習(xí)下。2018-02-02

