如何统计parent_id结构无限层级分类中指定分类的最高层级数
分类最高层级统计实现调整
现有代码问题
- 遍历同层级子分类时共用
$append变量累加,会导致后遍历的兄弟分类层级被错误抬高 - 未兼容无任何子分类的边界场景,此时应返回1(仅包含当前分类自身)
- 仅收集了全部分类路径的层级值,未取最大值得到最深层级
修正后代码
public function getCategoryLevel($category) { // 初始层级为1,即当前分类本身 $maxLevel = 1; foreach ($category->childs as $child) { $childMaxLevel = $this->recursiveLevel($child, 2); $maxLevel = max($maxLevel, $childMaxLevel); } return $maxLevel; } public function recursiveLevel($item, $currentLevel) { $currentMax = $currentLevel; foreach ($item->childs as $child) { $childMaxLevel = $this->recursiveLevel($child, $currentLevel + 1); $currentMax = max($currentMax, $childMaxLevel); } return $currentMax; }
调整说明
- 移除全局收集层级的
$count数组,改为每个子分类树独立返回自身的最大层级,避免变量污染 - 遍历同层级子分类时,每个子节点的初始层级独立计算,不会被前一个兄弟节点的递归逻辑影响
- 自动兼容无任何子分类的场景,直接返回正确值1
- 最终返回所有子分类路径的最大层级,符合包含自身的最深总层级需求
内容的提问来源于stack exchange,提问作者Sushil Aashish
相关产品推荐
相关产品推荐

