下面我来详细讲解“PHP实现无限级分类(递归方法)”的完整攻略。
为什么要使用无限级分类?
在多个领域中,如电商网站、新闻分类、博客分类等都需要分类功能。如果使用普通的分类方式,那么层级只有1-2个层级,嵌套的层级比较少,很难满足实际需求。因此,我们需要无限级分类。
基本思路
无限级分类的基本思路为:在同一张数据库表中,通过parent_id字段与id字段自关联实现。通过递归的方式一一遍历该表中的所有内容,按照父子关系归类,最后输出。
具体实现过程
以下是具体的实现过程:
第一步:建立数据表
首先我们需要建立一张数据表,可以参考下面这个数据表结构。
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
第二步:编写查询函数
我们需要创建一个查询函数,该函数中使用递归方法实现无限级分类。函数的主要功能为:遍历该表中的所有内容,将每一个分类按照父子关系归类并输出。
这个函数可以参考下面的示例代码:
function getTree($parent_id = 0, $level = 0) {
// 设置空数组,用于存储结果
$result = array();
// 查询子分类
$sql = "SELECT * FROM category WHERE parent_id = {$parent_id}";
$query = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($query)) {
// 拼接空格,根据分类的等级来缩进
$row['name'] = str_repeat(' ', $level * 4) . $row['name'];
// 将当前分类加入结果数组
$result[] = $row;
// 递归查询子分类
$sub_result = getTree($row['id'], $level + 1);
// 将子分类加入结果数组
$result = array_merge($result, $sub_result);
}
return $result;
}
第三步:输出分类数据
我们需要将取得的分类数据格式化,方便在前端页面中以树形结构展示。可以参考下面这个示例代码:
// 获取分类数据,并将结果集赋值给 $data 变量
$data = getTree();
// 循环遍历 $data 数组,并输出每一条分类数据
foreach ($data as $item) {
echo "<div>{$item['name']}</div>";
}
这样,我们就可以将数据库中取出的数据按照父子关系归类,并且以树形结构展示出来。
实例说明
下面我们来看两个实例说明,来更好地理解如何使用递归方法实现无限级分类。
实例一:博客分类
假设我们现在有一个博客网站,博客分类需要支持多层级分类,我们可以通过递归方法实现。
我们现在有以下的数据:
id | parent_id | name |
---|---|---|
1 | 0 | Web |
2 | 0 | Java |
3 | 0 | C# |
4 | 1 | HTML/CSS |
5 | 1 | Javascript |
6 | 2 | Spring |
7 | 2 | Hibernate |
8 | 3 | ASP.NET |
9 | 3 | WinForm |
通过上面编写的查询函数,我们可以得到下面的分类数据,以树形结构展示出来:
Web
HTML/CSS
Javascript
Java
Spring
Hibernate
C#
ASP.NET
WinForm
实例二:新闻分类
假设我们现在要开发一个新闻门户网站,需要支持新闻分类的无限级嵌套。
我们现在有以下的数据:
id | parent_id | name |
---|---|---|
1 | 0 | 国内新闻 |
2 | 0 | 国际新闻 |
3 | 1 | 国内时政 |
4 | 2 | 国际时事 |
5 | 3 | 国内财经 |
6 | 4 | 国际财经 |
通过上面编写的查询函数,我们可以得到下面的分类数据,以树形结构展示出来:
国内新闻
国内时政
国内财经
国际新闻
国际时事
国际财经
这样,我们就通过递归方法实现了一个无限级分类的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现无限级分类(递归方法) - Python技术站