1 回答
TA贡献1874条经验 获得超12个赞
最好的选择是在数据库的字段中指示级别,而不是一遍又一遍地动态计算它们。如果这不是一个选择,那么......
我们将结果准备到带有idfor 索引键的数组中并添加一个level字段:
$menu = [];
foreach($query as $row) {
$row->level = null;
$menu[$row->id] = $row;
}
一旦完成,剩下的就很简单了:
foreach($menu as &$item) {
if (is_null($item->parent)) {
$item->level = 1;
} else {
$item->level = $menu[$item->parent]->level + 1;
}
}
换句话说:如果父项是null,则该项目的级别为 1。否则,它是其父项的级别 + 1。这会产生以下(显示相关字段)数组:
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)
}
}
然后你就可以简单地做str_repeat (" ", $item['level'])。不过,这里有一个需要注意的地方:如果您的菜单项“乱序”,即它将不起作用。如果在其父母之前有一个孩子。
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报