php 递归无限级分类原理和实现代码
递归无限级分类的原理:
每一个分类都记录它的父级id,当为顶级分类时,父级id为0。这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几。
对数据进行重组,在重组的过程中,根据其父子关系,将相应的类别摆放到正确的位置。
/*无限极分类列表*/ public function getTree($data='',$cate_id=0) { if(empty($data)){ $data = $this->order('listorder')->field('id,parent_id,cate_name,listorder')->select()->toArray(); } return $this->_reSort($data,$cate_id); } //无限极分类树状结构,修改level值 /* @param $data 要遍历的分类数组 * @param $parent_id 节点pid,默认为0,表示从顶级节点开始 * @param $ret重组排序的所有后代节点 * @param $cate_level 节点层级 */ private function _reSort($data, $parent_id=0, $cate_level=0, $isClear=TRUE) { //用于保存重组排序后的结果 static $ret = array(); //刚进入函数要清除上次调用此函数后留下的静态变量的值,进入深一层循环时则不要清除 if($isClear) $ret = array(); foreach ($data as $k => $v) { if($v['parent_id'] == $parent_id) { $v['cate_level'] = $cate_level; //找到以$parent_id为父节点的子节点,将其保存 $ret[] = $v; unset($data[$k]); //然后以该节点为父节点,继续找后台节点 $this->_reSort($data, $v['id'], $cate_level+1, FALSE); } } return $ret; }
调用
class Category extends Base { public function index() { $category_model = new Categorys(); $categoryTree = $category_model->getTree(); return view('',[ 'categoryTree' =>$categoryTree, 'left_menu' => 1, ]); } }
下一篇:C语言小游戏开发 游戏模块化