1)无限级分类处理
<?php // 准备分类原始数据 $cate_arr = [ ['id'=>1,'name'=>'电脑','pid'=>0], ['id'=>2,'name'=>'手机','pid'=>0], ['id'=>3,'name'=>'戴尔','pid'=>1], ['id'=>4,'name'=>'联想','pid'=>1], ['id'=>5,'name'=>'苹果','pid'=>2], ['id'=>6,'name'=>'华为','pid'=>2], ['id'=>7,'name'=>'戴尔XPS','pid'=>3], ['id'=>8,'name'=>'苹果12','pid'=>5] ]; // 递归处理无限级分类 function getTree ($cate_arr = [] , $pid = 0 , $level = 0) { static $cate_tree_arr = []; foreach ($cate_arr as $key=>$value) { if ($value['pid'] == $pid) { $value['level'] = $level; $cate_tree_arr[] = $value; getTree($cate_arr,$value['id'],$level+1); } } return $cate_tree_arr; } // 显示无限级分类菜单 $cate_tree_arr = getTree($cate_arr); foreach ($cate_tree_arr as $key=>$value) { echo str_repeat("|----",$value['level']).$value['name'].'<br>'; }
2)根据指定分类项查找其父级分类
<?php // 准备分类原始数据 $cate_arr = [ ['id'=>1,'name'=>'电脑','pid'=>0], ['id'=>2,'name'=>'手机','pid'=>0], ['id'=>3,'name'=>'戴尔','pid'=>1], ['id'=>4,'name'=>'联想','pid'=>1], ['id'=>5,'name'=>'苹果','pid'=>2], ['id'=>6,'name'=>'华为','pid'=>2], ['id'=>7,'name'=>'戴尔XPS','pid'=>3], ['id'=>8,'name'=>'苹果12','pid'=>5] ]; // 查找指定菜单记录的父级分类 function getDeepPath ($cate_arr = [] , $current_cate_arr = []) { static $cate_deep_cate_arr = []; if (empty($cate_deep_cate_arr)) { $cate_deep_cate_arr[] = $current_cate_arr; } foreach ($cate_arr as $key=>$value) { if ($current_cate_arr['pid'] == $value['id']) { $cate_deep_cate_arr[] = $value; getDeepPath($cate_arr,$value); } } return $cate_deep_cate_arr; } // 显示父级分类层次 $cate_deep_cate_arr = getDeepPath($cate_arr,$cate_arr[7]); krsort($cate_deep_cate_arr); foreach ($cate_deep_cate_arr as $key=>$value) { echo ' -> '.$value['name']; }
3)根据指定分类查找其子级分类
<?php // 准备分类原始数据 $cate_arr = [ ['id'=>1,'name'=>'电脑','pid'=>0], ['id'=>2,'name'=>'手机','pid'=>0], ['id'=>3,'name'=>'戴尔','pid'=>1], ['id'=>4,'name'=>'联想','pid'=>1], ['id'=>5,'name'=>'苹果','pid'=>2], ['id'=>6,'name'=>'华为','pid'=>2], ['id'=>7,'name'=>'戴尔XPS','pid'=>3], ['id'=>8,'name'=>'苹果4','pid'=>5], ['id'=>9,'name'=>'苹果6','pid'=>5], ['id'=>10,'name'=>'苹果12','pid'=>5] ]; // 递归处理无限级分类 function getTree ($cate_arr = [] , $pid = 0 , $level = 0) { static $cate_tree_arr = []; foreach ($cate_arr as $key=>$value) { if ($value['pid'] == $pid) { $value['level'] = $level; $cate_tree_arr[] = $value; getTree($cate_arr,$value['id'],$level+1); } } return $cate_tree_arr; } // 显示无限级分类菜单(注意:这里在传参时直接指定想要查询的编号作为pid即可) $cate_tree_arr = getTree($cate_arr,2); foreach ($cate_tree_arr as $key=>$value) { echo str_repeat("|----",$value['level']).$value['name'].'<br>'; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通