PHP+MySQL实现无限分类实例详解
概述
无限分类,也称为多级分类或者树形分类,是指类别之间存在着上下级关系,每个类别下面可以包含无数个子类别,基本上可以无限扩展,因此被称为无限分类。在Web开发的过程中,无限分类是非常常见的一种数据结构形式,如商品分类、文章分类等。
在这里,我们将结合PHP和MySQL来实现无限分类。在展示无限分类的同时,还将涉及到相应的增、删、改、查操作。
步骤
1. 数据库表设计
首先,在MySQL数据库中创建一个名为“category”的表,用来存储所有的分类信息。表结构如下:
CREATE TABLE `category` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`name` varchar(30) NOT NULL COMMENT '分类名称',
`pid` int(11) DEFAULT '0' COMMENT '父级分类ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类表';
其中,id
为分类的唯一标识符,name
为分类的名称,pid
为父级分类的ID,如果是一级分类,则pid
为0。
2. 数据库操作
接下来,通过PHP来进行数据库操作,包括增、删、改、查。
首先是新增分类,以下是示例代码:
function addCategory($name, $pid) {
$sql = "INSERT INTO category (name,pid) VALUES ('{$name}',{$pid})";
$result = mysqli_query($conn, $sql);
$id = mysqli_insert_id($conn);
return $id;
}
该方法通过执行INSERT语句向数据库中插入一条新纪录,并返回新纪录的ID,以便后续的分类级别确定。
然后是删除分类,以下是示例代码:
function delCategory($id) {
$sql = "DELETE FROM category WHERE id={$id}";
$result = mysqli_query($conn, $sql);
return $result;
}
该方法根据传入的ID删除对应的分类记录。
接着是更新分类,以下是示例代码:
function updateCategory($id, $name) {
$sql = "UPDATE category SET name='{$name}' WHERE id={$id}";
$result = mysqli_query($conn, $sql);
return $result;
}
该方法根据传入的ID修改对应的分类名称。
最后是查询分类,以下是示例代码:
function getCategory($id) {
$data = array();
$sql = "SELECT * FROM category WHERE id={$id}";
$result = mysqli_query($conn, $sql);
if ($row = mysqli_fetch_assoc($result)) {
$data = $row;
}
return $data;
}
该方法根据传入的ID查询对应的分类记录。
3. 实现无限分类
接下来是本文的重点,实现无限分类。
在实现无限分类之前,先来说一下二叉树的遍历方式,分别有前序遍历、中序遍历和后序遍历。而无限分类的遍历方式,主要采用的是后序遍历,因为数据的存储跟二叉树所采用的存储方式是一样的。下面是后序遍历的示例代码:
function getCategoryList($pid = 0) {
$data = array();
$childList = getChildList($pid);
foreach ($childList as $child) {
$child['child'] = getCategoryList($child['id']);
$data[] = $child;
}
return $data;
}
该方法首先通过getChildList()
方法来获取当前分类ID下面的所有子分类,然后通过循环遍历所有子分类,并通过递归调用getCategoryList()
方法来获取当前分类ID下面的所有子分类,直到没有子分类为止。最终返回的结果是一个多维数组,其中包含了所有的分类信息。
而getChildList()
方法则是用来获取当前分类ID下面的所有子分类,以下是示例代码:
function getChildList($pid) {
$data = array();
$sql = "SELECT * FROM category WHERE pid={$pid} ORDER BY id ASC";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
$data[] = $row;
}
return $data;
}
该方法通过执行SELECT语句来查询所有的子分类,然后通过循环遍历所有子分类,最终返回一个包含所有子分类信息的数组。
示例说明
示例一
假设现在需要新增一个名为“计算机”的一级分类,以下是如何实现的代码:
$name = '计算机';
$pid = 0;
$id = addCategory($name, $pid);
该代码首先将分类名称和父级分类ID作为参数传入到addCategory()
方法中,然后该方法会执行INSERT语句来新增一条纪录,并将新增记录的ID返回到$id
变量中。
示例二
假设现在需要获取所有分类信息,以下是如何实现的代码:
$categoryList = getCategoryList();
该代码直接调用getCategoryList()
方法,然后该方法会通过后序遍历的方式来获取所有的分类信息,并将结果返回到$categoryList
变量中,最终返回的结果是一个多维数组,其中包含了所有的分类信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php+mysql实现无限分类实例详解 - Python技术站