php实现分类不难,实现无限分类其实也不难,但是将无限分类显示出来,并且显示的有层次感就需要使用一些技巧了;我相信很多程序员都想过使用递归去实现,但是大家都知道递归性能不太好,如果数据量大的话,会占用大量内存,并且耗费时间也比较多;所以很早就有大神想出了排序的方法:
1、首先是数据表的设计,看如下图片:
其实设计这个表的关键之处就是full_path字段。
2、插入数据时full_path字段的处理
full_path其实就是当前数据的路径加上父级路径的结合,如下图:
3、php服务端获取数据:
$list=M()->table("menu")->where("status=1")->order("ORDER BY full_path asc")->select();
print_r($list);
上面代码就是通过full_path的排序,将数据按父子级排列出来,至于如何将数据显示出来是有明显等级的,那就是通过将path或者full_path使用
foreach ($list as $val) {
$level=explode(',', $val['path']);
$levelstr=str_repeat(" ",count($level)-1).'|--';
echo $levelstr.$val['name'].'
';
}
上面代码有一个可能大家不太常使用的函数,就是str_repeat函数,这个函数的作用就是可以将字符按照自己设定的数量进行重复显示,上面的示例就是将空格按照等级数重复显示,从而达到缩进效果。
分类显示效果如下:
|--网站管理
|--站点信息
|--站点分类
|--菜单管理
|--菜单列表
|--用户管理
|--会员列表
|--管理员列表
|--文章管理
|--文章列表
|--文章分类
|--系统配置
|--站点信息
|--采集管理
|--采集列表
上面的介绍只是无限分类的简易实现方法,具体的实现得您按照自己得需求去做改进。