首页 > 文章列表 > 如何使用PHP实现多级分类功能

如何使用PHP实现多级分类功能

PHP多级分类 分类树 层级分类
179 2023-06-29

在网站开发中,分类功能是非常常见的需求,而多级分类更是现在很多网站必备的功能。比如说商品分类、新闻分类、论坛分类等,都可以使用多级分类来进行分类管理。在本文中,我们将介绍如何使用 PHP 实现多级分类功能。

一、数据库设计

在进行多级分类功能实现之前,我们需要进行数据库设计,设计一个分类表,例如:

CREATE TABLE `category` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
    `name` varchar(30) NOT NULL COMMENT '分类名称',
    `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父分类ID',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='分类表';

该表设计了三个字段,id 为分类的唯一标识,name 为分类名称,parent_id 为父分类的ID,用于建立父子关系。

二、实现递归获取分类

接下来,我们需要实现递归获取分类的方法,即从数据库中获取分类树。代码如下:

<?php
function getCategoryTree($parent_id = 0, $deep = 0)
{
    $result = array();
    $sql = "SELECT * FROM `category` WHERE `parent_id` = $parent_id ORDER BY `id` ASC";
    // 执行 SQL 语句,获取结果集
    // $result = ....

    foreach ($result as $row) {
        $row['deep'] = $deep;
        $children = getCategoryTree($row['id'], $deep + 1);
        if ($children) {
            $row['children'] = $children;
        }
        $categories[] = $row;
    }

    return $categories;
}
?>

该方法通过递归调用自身,获取每个分类的所有子分类,并按照父子关系建立分类树。

三、在页面上展示分类

获取了分类树之后,我们需要将分类树在页面上展示出来。代码如下:

<ul>
    <?php foreach ($categories as $category) : ?>
        <li>
            <?php echo str_repeat('-', $category['deep'] * 2); ?>
            <?php echo $category['name']; ?>
            <?php if ($category['children']) : ?>
                <?php echo '<ul>'; ?>
                <?php foreach ($category['children'] as $child) : ?>
                    <li><?php echo $child['name']; ?></li>
                <?php endforeach; ?>
                <?php echo '</ul>'; ?>
            <?php endif; ?>
        </li>
    <?php endforeach; ?>
</ul>

展示分类树使用了树形结构,通过 ulli 实现。其中,父分类缩进使用了 str_repeat 重复一个字符串。

四、添加分类

最后,我们还需要实现添加分类功能。代码如下:

<?php
if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $parent_id = $_POST['parent_id'];
    // 执行添加分类操作
}
?>

<form method="post" action="">
    <div>
        <label for="name">分类名称:</label>
        <input type="text" name="name" id="name" required>
    </div>
    <div>
        <label for="parent_id">选择父分类:</label>
        <select name="parent_id" id="parent_id">
            <option value="0">无</option>
            <?php foreach ($categories as $category) : ?>
                <option value="<?php echo $category['id']; ?>">
                    <?php echo str_repeat('-', $category['deep'] * 2) . $category['name']; ?>
                </option>
            <?php endforeach; ?>
        </select>
    </div>
    <div>
        <button type="submit" name="submit">添加分类</button>
    </div>
</form>

在表单中选择父分类时,直接使用分类树进行展示,并通过缩进的方式表示父子关系。

总结

本文介绍了如何使用 PHP 实现多级分类功能。通过实现递归获取分类、在页面上展示分类、添加分类等操作,可以很方便地实现分类管理功能。