1 回答

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
最好的選擇是在數(shù)據(jù)庫(kù)的字段中指示級(jí)別,而不是一遍又一遍地動(dòng)態(tài)計(jì)算它們。如果這不是一個(gè)選擇,那么......
我們將結(jié)果準(zhǔn)備到帶有idfor 索引鍵的數(shù)組中并添加一個(gè)level字段:
$menu = [];
foreach($query as $row) {
$row->level = null;
$menu[$row->id] = $row;
}
一旦完成,剩下的就很簡(jiǎn)單了:
foreach($menu as &$item) {
if (is_null($item->parent)) {
$item->level = 1;
} else {
$item->level = $menu[$item->parent]->level + 1;
}
}
換句話說(shuō):如果父項(xiàng)是null,則該項(xiàng)目的級(jí)別為 1。否則,它是其父項(xiàng)的級(jí)別 + 1。這會(huì)產(chǎn)生以下(顯示相關(guān)字段)數(shù)組:
array(17) {
[1] · object(stdClass)#2 (7) {
["title"] · string(4) "Home"
["parent"] · NULL
["level"] · int(1)
} ...
[6] · object(stdClass)#6 (7) {
["title"] · string(9) "Service 1"
["parent"] · int(3)
["level"] · int(2)
} ...
[15] · object(stdClass)#14 (7) {
["title"] · string(11) "Service 1.1"
["parent"] · int(6)
["level"] · int(3)
} ...
[17] · object(stdClass)#16 (7) {
["title"] · string(13) "Service 1.1.1"
["parent"] · int(15)
["level"] · int(4)
}
}
然后你就可以簡(jiǎn)單地做str_repeat (" ", $item['level'])。不過(guò),這里有一個(gè)需要注意的地方:如果您的菜單項(xiàng)“亂序”,即它將不起作用。如果在其父母之前有一個(gè)孩子。
- 1 回答
- 0 關(guān)注
- 118 瀏覽
添加回答
舉報(bào)