* @param array $arr 要排序的数组 * @param integer $pid 从哪里开始,默认是0,顶级开始 * @param integer $level 表示层级,默认是0,顶级 * @return array 排好序的数组 */ public function tree($arr,$pid = 0,$level = 0){ $res = array(); foreach ($arr as $v) { if ($v['parent_id'] == $pid) { //说明找到,保存起来 //首先,需要将level保存到当前分类中 $v['level'] = $level; //$res[] = $v; //继续查找,递归,条件发生变化 $child = $this->tree($arr,$v['cat_id'],$level+1); //返回的过程中,处理,将找到的后代分类,放入到$res中,合并的方式 $res[] = $v; $res = array_merge($res,$child); } } //返回结果 return $res; }
//获取指定分类下的所有后代分类的cat_id, 也包括它自己 public function getSubIds($cat_id){ $categorymodel=M("Category"); $allcats = $categorymodel->where("1")->select(); $cats = $this->tree($allcats,$cat_id); //二维数组 $ids = array(); foreach ($cats as $v) { $ids[] = $v['cat_id']; } //将自己也追加到$ids中 $ids[] = $cat_id; //返回结果 return $ids; }