PHP+MySQL中的無限分類方法有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹“PHP+MySQL中的無限分類方法有哪些”,在日常操作中,相信很多人在PHP+MySQL中的無限分類方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”PHP+MySQL中的無限分類方法有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

泰州網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,泰州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為泰州近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的泰州做網(wǎng)站的公司定做!

第一種方法

這種方法是很常見、很傳統(tǒng)的一種,先看表結(jié)構(gòu)

表:category

idint主鍵,自增

namevarchar分類名稱

pidint父類id,默認(rèn)0

頂級(jí)分類的pid默認(rèn)就是0了。當(dāng)我們想取出某個(gè)分類的子分類樹的時(shí)候,基本思路就是遞歸,當(dāng)然,出于效率問題不建議每次遞歸都查詢數(shù)據(jù)庫,通常的做法是先講所有分類取出來,保存到PHP數(shù)組里,再進(jìn)行處理,最后還可以將結(jié)果緩存起來以提高下次請(qǐng)求的效率。

先來構(gòu)建一個(gè)原始數(shù)組,這個(gè)直接從數(shù)據(jù)庫中拉出來就行:

$categories=array(

array('id'=>1,'name'=>'電腦','pid'=>0),

array('id'=>2,'name'=>'手機(jī)','pid'=>0),

array('id'=>3,'name'=>'筆記本','pid'=>1),

array('id'=>4,'name'=>'臺(tái)式機(jī)','pid'=>1),

array('id'=>5,'name'=>'智能機(jī)','pid'=>2),

array('id'=>6,'name'=>'功能機(jī)','pid'=>2),

array('id'=>7,'name'=>'超級(jí)本','pid'=>3),

array('id'=>8,'name'=>'游戲本','pid'=>3),

);

目標(biāo)是將它轉(zhuǎn)化為下面這種結(jié)構(gòu)

電腦

—筆記本

——-超級(jí)本

——-游戲本

—臺(tái)式機(jī)

手機(jī)

—智能機(jī)

—功能機(jī)

用數(shù)組來表示的話,可以增加一個(gè)children鍵來存儲(chǔ)它的子分類:

array(

//1對(duì)應(yīng)id,方便直接讀取

1=>array(

'id'=>1,

'name'=>'電腦',

'pid'=>0,

children=>array(

&array(

'id'=>3,

'name'=>'筆記本',

'pid'=>1,

'children'=>array(

//此處省略

)

),

&array(

'id'=>4,

'name'=>'臺(tái)式機(jī)',

'pid'=>1,

'children'=>array(

//此處省略

)

),

)

),

//其他分類省略

)

處理過程:

$tree=array();

//第一步,將分類id作為數(shù)組key,并創(chuàng)建children單元

foreach($categoriesas$category){

$tree[$category['id']]=$category;

$tree[$category['id']]['children']=array();

}

//第二部,利用引用,將每個(gè)分類添加到父類children數(shù)組中,這樣一次遍歷即可形成樹形結(jié)構(gòu)。

foreach($treeas$k=>$item){

if($item['pid']!=0){

$tree[$item['pid']]['children'][]=&$tree[$k];

}

}

print_r($tree);

打印結(jié)果如下:

Array

(

[1]=>Array

(

[id]=>1

[name]=>電腦

[pid]=>0

[children]=>Array

(

[0]=>Array

(

[id]=>3

[name]=>筆記本

[pid]=>1

[children]=>Array

(

[0]=>Array

(

[id]=>7

[name]=>超級(jí)本

[pid]=>3

[children]=>Array

(

)

)

[1]=>Array

(

[id]=>8

[name]=>游戲本

[pid]=>3

[children]=>Array

(

)

)

)

)

[1]=>Array

(

[id]=>4

[name]=>臺(tái)式機(jī)

[pid]=>1

[children]=>Array

(

)

)

)

)

[2]=>Array

(

[id]=>2

[name]=>手機(jī)

[pid]=>0

[children]=>Array

(

[0]=>Array

(

[id]=>5

[name]=>智能機(jī)

[pid]=>2

[children]=>Array

(

)

)

[1]=>Array

(

[id]=>6

[name]=>功能機(jī)

[pid]=>2

[children]=>Array

(

)

)

)

)

[3]=>Array

(

[id]=>3

[name]=>筆記本

[pid]=>1

[children]=>Array

(

[0]=>Array

(

[id]=>7

[name]=>超級(jí)本

[pid]=>3

[children]=>Array

(

)

)

[1]=>Array

(

[id]=>8

[name]=>游戲本

[pid]=>3

[children]=>Array

(

)

)

)

)

[4]=>Array

(

[id]=>4

[name]=>臺(tái)式機(jī)

[pid]=>1

[children]=>Array

(

)

)

[5]=>Array

(

[id]=>5

[name]=>智能機(jī)

[pid]=>2

[children]=>Array

(

)

)

[6]=>Array

(

[id]=>6

[name]=>功能機(jī)

[pid]=>2

[children]=>Array

(

)

)

[7]=>Array

(

[id]=>7

[name]=>超級(jí)本

[pid]=>3

[children]=>Array

(

)

)

[8]=>Array

(

[id]=>8

[name]=>游戲本

[pid]=>3

[children]=>Array

(

)

)

)

優(yōu)點(diǎn):關(guān)系清楚,修改上下級(jí)關(guān)系簡(jiǎn)單。

缺點(diǎn):使用PHP處理,假如分類數(shù)量龐大,效率也會(huì)降低。

PHP+MySQL無限分類有哪些方法

第二種方法

這種方法是在表字段中增加一個(gè)path字段:

表:category

idint主鍵,自增

namevarchar分類名稱

pidint父類id,默認(rèn)0

pathvarchar路徑

示例數(shù)據(jù):

idnamepidpath

1電腦00

2手機(jī)00

3筆記本10-1

4超級(jí)本30-1-3

5游戲本30-1-3

path字段記錄了從根分類到上一級(jí)父類的路徑,用id+’-'表示。

這種方式,假設(shè)大家要查詢電腦下的所有后代分類,只需要一條sql語句:

selectid,name,pathfromcategorywherepathlike(selectconcat(path,’-',id,’%')aspathfromcategorywhereid=1);

結(jié)果:

+—-+———–+——-+

|id|name|path|

+—-+———–+——-+

|3|筆記本|0-1|

|4|超級(jí)本|0-1-3|

|5|游戲本|0-1-3|

+—-+———–+——-+

這種方式也被很多人所采納,我總結(jié)了下:

優(yōu)點(diǎn):查詢?nèi)菀?,效率高,path字段可以加索引。

缺點(diǎn):更新節(jié)點(diǎn)關(guān)系麻煩,需要更新所有后輩的path字段。

到此,關(guān)于“PHP+MySQL中的無限分類方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

本文標(biāo)題:PHP+MySQL中的無限分類方法有哪些-創(chuàng)新互聯(lián)
新聞來源:http://muchs.cn/article32/dsiesc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站營銷電子商務(wù)、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)