php配合mysql实现无限极分类效果

By | 2020年6月13日

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使用explode函数分割成数组,按照数据的元素数量将数据缩进,从而显示出等级效果,如下:

foreach ($list as $val) {
    $level=explode(',', $val['path']);
    $levelstr=str_repeat("  ",count($level)-1).'|--';
    echo $levelstr.$val['name'].'<br>';
}

上面代码有一个可能大家不太常使用的函数,就是str_repeat函数,这个函数的作用就是可以将字符按照自己设定的数量进行重复显示,上面的示例就是将空格按照等级数重复显示,从而达到缩进效果。

分类显示效果如下:

|--网站管理
  |--站点信息
  |--站点分类
|--菜单管理
|--菜单列表
|--用户管理
  |--会员列表
  |--管理员列表
|--文章管理
  |--文章列表
  |--文章分类
|--系统配置
  |--站点信息
|--采集管理
  |--采集列表

上面的介绍只是无限分类的简易实现方法,具体的实现得您按照自己得需求去做改进。

发表评论

电子邮件地址不会被公开。 必填项已用*标注