摘要:有這樣一個(gè)表,是分類的,是分類名稱,是上級(jí)分類的?,F(xiàn)在有個(gè)分類,程序要找到它上級(jí)的上級(jí)的上級(jí)分類的,簡(jiǎn)單說(shuō)就是找出頂級(jí)分類的。比如新鮮水果的是,對(duì)應(yīng)父類是,而的父是,沒有父類,也就是頂級(jí)分類了。
有這樣一個(gè)表,id是分類的ID,name是分類名稱,pid是上級(jí)分類的ID。
現(xiàn)在有個(gè)分類ID,程序要找到它上級(jí)的上級(jí)的上級(jí)……分類的ID,簡(jiǎn)單說(shuō)就是找出頂級(jí)分類的ID。
比如“新鮮水果”的ID是13,對(duì)應(yīng)父類ID是5,而5的父ID是1,1沒有父類,也就是頂級(jí)分類了。
以前年輕氣盛不懂事,總想著用遞歸來(lái)查找,然后再將結(jié)果緩存來(lái)解決性能問題。
后來(lái)又試過(guò)將整個(gè)表緩存起來(lái),再遞歸查找。
再后來(lái)……似乎比較少有機(jī)會(huì)遇到無(wú)限級(jí)分類……
最近有個(gè)同事問我怎么“優(yōu)雅”的解決這個(gè)問題。
于是我靈機(jī)一動(dòng),就有了如下解決方案:
pid 1 => 0, // 省略... 5 => 1, // 省略... 13 => 5 ]; // 建議將這數(shù)組緩存起來(lái) $id = 13; while($arr[$id]) { $id = $arr[$id]; } echo $id; // 1
不得不說(shuō):真是太優(yōu)雅了!連我都佩服我自己了,同事更是五體投地,痛哭流涕。
因?yàn)樗麑懥藥资醒h(huán)再判斷再遞歸的代碼,被我用兩行代碼替換了……
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21420.html
摘要:昨天幫同事解決問題,于是誕生了超優(yōu)雅兩行代碼搞定無(wú)限級(jí)分類獲取頂級(jí)分類這篇文章。這次要解決的問題是根據(jù)分類,獲取所有下級(jí)分類的,這里說(shuō)的所有下級(jí)分類,是包含下級(jí)下下級(jí)下下下級(jí)另外剛好在學(xué)習(xí),于是用上了對(duì)象。 昨天幫同事解決問題,于是誕生了超優(yōu)雅!兩行代碼搞定 php 無(wú)限級(jí)分類 獲取頂級(jí)分類ID這篇文章。 晚上回家做自己的node.js項(xiàng)目的時(shí)候,又遇到關(guān)于無(wú)限級(jí)分類的問題了。其實(shí)也不...
摘要:第三條同樣需要遞歸,因?yàn)橥ㄟ^(guò)一個(gè)分類,數(shù)據(jù)庫(kù)中只存儲(chǔ)了其直屬父類,需要通過(guò)遞歸到頂級(jí)分類才能獲取到它們之間的所有分類信息。 原文發(fā)表于我的博客: https://blog.kaciras.net/article/36 在一些系統(tǒng)中,對(duì)內(nèi)容進(jìn)行分類是必需的功能。比如電商就需要對(duì)商品做分類處理,以便于客戶搜索;論壇也會(huì)分為很多板塊;門戶網(wǎng)站、也得對(duì)網(wǎng)站的內(nèi)容做各種分類。 分類對(duì)于一個(gè)內(nèi)容展...
摘要:我們?cè)谛陆ㄒ粋€(gè)刪除前的鉤子函數(shù),再利用遞歸方法實(shí)現(xiàn)子欄目的刪除。最后我們刪除把鉤子函數(shù)恢復(fù)到原始狀態(tài)在瀏覽器中輸入,然后點(diǎn)擊美國(guó)一欄中的刪除,此時(shí)會(huì)同時(shí)刪除美國(guó)下的紐約。至此,無(wú)限級(jí)分類的刪除功能操作完畢。 在此現(xiàn)更正一下之前的預(yù)告,之前忘記了先應(yīng)該把無(wú)限級(jí)分類欄目列表功能做完,也就是刪除功能還沒做,所以今天我們先做刪除,下一節(jié)再做面包屑導(dǎo)航。非常抱歉。 同時(shí),不知道是什么原因,上一節(jié)...
閱讀 3045·2021-11-16 11:42
閱讀 3731·2021-09-08 09:36
閱讀 974·2019-08-30 12:52
閱讀 2513·2019-08-29 14:12
閱讀 805·2019-08-29 13:53
閱讀 3642·2019-08-29 12:16
閱讀 671·2019-08-29 12:12
閱讀 2497·2019-08-29 11:16