欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

解析實(shí)現(xiàn)PHP+Mysql無(wú)限分類的方法匯總

2018-02-09 14:06:03 1548瀏覽

在現(xiàn)如今,隨著IT互聯(lián)網(wǎng)開(kāi)發(fā)技術(shù)飛速的發(fā)展和進(jìn)步,相信很多PHP開(kāi)發(fā)程序員聽(tīng)說(shuō)過(guò)無(wú)限分類這個(gè)話題,那么下面我們來(lái)看看PHP結(jié)合Mysql如何實(shí)現(xiàn)。



第一種方法

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

表:category

idint主鍵,自增

namevarchar分類名稱

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

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

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

復(fù)制代碼代碼如下:

$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ù)組來(lái)表示的話,可以增加一個(gè)children鍵來(lái)存儲(chǔ)它的子分類:

復(fù)制代碼代碼如下:

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(

//此處省略

)

),

)

),

//其他分類省略

)

處理過(guò)程:

復(fù)制代碼代碼如下:

$tree=array();

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

foreach($categoriesas$category){

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

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

}

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

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

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

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

}

}

print_r($tree);

打印結(jié)果如下:

復(fù)制代碼代碼如下:

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ì)降低。

第二種方法

這種方法是在表字段中增加一個(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語(yǔ)句:

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

結(jié)果:

+----+-----------+-------+

|id|name|path|

+----+-----------+-------+

|3|筆記本|0-1|

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

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

+----+-----------+-------+

以上就是關(guān)于扣丁學(xué)堂PHP培訓(xùn)之解析實(shí)現(xiàn)PHP+Mysql無(wú)限分類的方法匯總的詳細(xì)介紹最后想要了解更多關(guān)于PHP開(kāi)發(fā)發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的PHP視頻教程系統(tǒng),通過(guò)千鋒扣丁學(xué)堂金牌講師在線錄制的一套PHP視頻教程課程,讓你快速掌握PHP從入門(mén)到精通開(kāi)發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂PHP開(kāi)發(fā)工程師技術(shù)交流群:374332265。



扣丁學(xué)堂微信公眾號(hào)



關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料



查看更多關(guān)于“php培訓(xùn)資訊的相關(guān)文章>>

標(biāo)簽: PHP培訓(xùn) PHP視頻教程 PHP從入門(mén)到精通 PHP學(xué)習(xí)路線圖 PHP開(kāi)發(fā)工程師

熱門(mén)專區(qū)

暫無(wú)熱門(mén)資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部