有這樣一個(gè)表,id是分類的ID,name是分類名稱,pid是上級分類的ID。
現(xiàn)在有個(gè)分類ID,程序要找到它上級的上級的上級……分類的ID,簡單說就是找出頂級分類的ID。
比如“新鮮水果”的ID是13,對應(yīng)父類ID是5,而5的父ID是1,1沒有父類,也就是頂級分類了。
以前年輕氣盛不懂事,總想著用遞歸來查找,然后再將結(jié)果緩存來解決性能問題。
后來又試過將整個(gè)表緩存起來,再遞歸查找。
再后來……似乎比較少有機(jī)會(huì)遇到無限級分類……
最近有個(gè)同事問我怎么“優(yōu)雅”的解決這個(gè)問題。
于是我靈機(jī)一動(dòng),就有了如下解決方案:
<?php$sql = "select id, pid from tablename ";// 查詢后 將結(jié)果處理成 如下數(shù)組格式$arr = [ // id => pid 1 => 0, // 省略... 5 => 1, // 省略... 13 => 5];// 建議將這數(shù)組緩存起來$id = 13;while($arr[$id]) { $id = $arr[$id];}echo $id; // 1 不得不說:真是太優(yōu)雅了!連我都佩服我自己了,同事更是五體投地,痛哭流涕。
因?yàn)樗麑懥藥资醒h(huán)再判斷再遞歸的代碼,被我用兩行代碼替換了……

















