一、数据格式 $arr = Array ( [0] => Array ( [cat_id] => 1 [cat_name] => 关于我们 [sort_order] => 0 [parent_id] => 0 ) [1] => Array ( [cat_id] => 2 [cat_name] => 站内公告 [sort_order] => 0 [parent_id] => 0 ) [2] => Array ( [cat_id] => 3 [cat_name] => 促销咨询 [sort_order] => 0 [parent_id] => 0 ) [3] => Array ( [cat_id] => 4 [cat_name] => 售前答疑 [sort_order] => 0 [parent_id] => 2 ) [4] => Array ( [cat_id] => 5 [cat_name] => 售后答疑 [sort_order] => 0 [parent_id] => 2 ) [5] => Array ( [cat_id] => 6 [cat_name] => 企业文化 [sort_order] => 0 [parent_id] => 0 ) [6] => Array ( [cat_id] => 11 [cat_name] => 企业发展历程 [sort_order] => 0 [parent_id] => 1 ) [7] => Array ( [cat_id] => 12 [cat_name] => 首页公告 [sort_order] => 0 [parent_id] => 2 ) ) 二、无限级分类实现 class ArticleCat{ //筛选分类数据 public function getCatTree($arr,$id = 0,$lev = 0) { $tree = array(); foreach ($arr as $v){ if ($v['parent_id'] == $id){ $v['lev'] = $lev; $tree[] = $v; $tree = array_merge($tree,$this->getCatTree($arr,$v['cat_id'],$lev+1)); } } return $tree; } } 三、调用方式 $catModel = new ArticleCat(); $catList = $catModel->getCatTree($arr); 四、返回数据格式 $catList = Array ( [0] => Array ( [cat_id] => 1 [cat_name] => 关于我们 [sort_order] => 0 [parent_id] => 0 [lev] => 0 ) [1] => Array ( [cat_id] => 11 [cat_name] => 企业发展历程 [sort_order] => 0 [parent_id] => 1 [lev] => 1 ) [2] => Array ( [cat_id] => 2 [cat_name] => 站内公告 [sort_order] => 0 [parent_id] => 0 [lev] => 0 ) [3] => Array ( [cat_id] => 4 [cat_name] => 售前答疑 [sort_order] => 0 [parent_id] => 2 [lev] => 1 ) [4] => Array ( [cat_id] => 5 [cat_name] => 售后答疑 [sort_order] => 0 [parent_id] => 2 [lev] => 1 ) [5] => Array ( [cat_id] => 12 [cat_name] => 首页公告 [sort_order] => 0 [parent_id] => 2 [lev] => 1 ) [6] => Array ( [cat_id] => 3 [cat_name] => 促销咨询 [sort_order] => 0 [parent_id] => 0 [lev] => 0 ) [7] => Array ( [cat_id] => 6 [cat_name] => 企业文化 [sort_order] => 0 [parent_id] => 0 [lev] => 0 ) ) 五、在前端直接遍历的效果(此处以ThinkPHP模板为例) <label>文章分类</label> <select name='cat_id'style="345px; height:32px; line-height:32px; border-top:solid 1px #c3ab7d; border-left:solid 1px #c3ab7d; border-right:solid 1px #e7d5ba; border-bottom:solid 1px #e7d5ba; background: rgba(0, 0, 0, 0) repeat-x scroll 0 0;"> <volist name="catList" id="vo"> <option value="<{$vo.cat_id}>"><?php echo str_repeat(' ',$vo['lev']);?><{$vo.cat_name}></option> </volist> </select>
![](https://images2015.cnblogs.com/blog/1105789/201702/1105789-20170216221920629-661416909.png)