利用两个for循环实现无限级分类
表:
字段名字段类型备注默认值idint主键 auto-increment namevarchar分类名称 pidint父类id0 顶级分类的 pid 默认就是0了。当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,通常的做法是先将所有分类取出来,数据保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率。
目标是将它转化为下面这种结构 电脑 >笔记本 >>超级本 >> 游戏本 > 台式机 手机 > 智能机 > 功能机
二。递归分类
class Category {
static public functionsortOut($cate,$pid=0,$level=0,$html='--'){ $tree = array(); foreach($cate as $v){ if($v['id'] == $pid){ $v['level'] = $level + 1; $v['html'] = str_repeat($html, $level); $tree[] = $v; $tree = array_merge($tree,self::sortOut($cate,$v['id'],$level+1,$html)); } } return $tree; } } function tree(&$list,$pid=0,$level=0,$html='--'){ static $tree= array(); foreach($list as $v){ if($v['pid'] == $pid){ $v['sort'] = $level; $v['html'] = str_repeat($html,$level); $tree[] = $v; tree($list,$v['id'],$level+1); } } return$tree; }
