当前位置:首页 > PHP

php 实现分类

2026-02-28 14:54:49PHP

PHP 实现分类功能

数据库设计

创建分类表结构,通常包含idnameparent_id等字段。示例SQL:

CREATE TABLE categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    parent_id INT DEFAULT NULL,
    FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE CASCADE
);

递归查询分类

使用递归方法获取多级分类:

function getCategories($parentId = null) {
    $categories = [];
    $query = "SELECT * FROM categories WHERE parent_id " . ($parentId ? "= $parentId" : "IS NULL");
    $result = mysqli_query($connection, $query);

    while ($row = mysqli_fetch_assoc($result)) {
        $row['children'] = getCategories($row['id']);
        $categories[] = $row;
    }

    return $categories;
}

分类展示

前端循环显示分类:

php 实现分类

function displayCategories($categories, $level = 0) {
    foreach ($categories as $category) {
        echo str_repeat('&nbsp;', $level * 4) . $category['name'] . "<br>";
        if (!empty($category['children'])) {
            displayCategories($category['children'], $level + 1);
        }
    }
}

分类管理

添加分类的PHP处理代码:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'];
    $parentId = $_POST['parent_id'] ?: null;

    $stmt = $pdo->prepare("INSERT INTO categories (name, parent_id) VALUES (?, ?)");
    $stmt->execute([$name, $parentId]);

    header("Location: categories.php");
    exit;
}

无限级分类优化

对于大型分类系统,考虑使用闭包表或嵌套集模型提高查询效率。闭包表示例:

php 实现分类

CREATE TABLE category_path (
    ancestor INT NOT NULL,
    descendant INT NOT NULL,
    depth INT NOT NULL,
    PRIMARY KEY (ancestor, descendant),
    FOREIGN KEY (ancestor) REFERENCES categories(id),
    FOREIGN KEY (descendant) REFERENCES categories(id)
);

分类缓存

使用缓存减少数据库查询:

function getCachedCategories() {
    $cacheKey = 'all_categories';
    if (!$categories = apcu_fetch($cacheKey)) {
        $categories = getCategories();
        apcu_store($cacheKey, $categories, 3600);
    }
    return $categories;
}

分类验证

添加分类时的数据验证:

function validateCategory($name, $parentId) {
    $errors = [];

    if (empty($name)) {
        $errors[] = '分类名称不能为空';
    }

    if ($parentId) {
        $stmt = $pdo->prepare("SELECT id FROM categories WHERE id = ?");
        $stmt->execute([$parentId]);
        if (!$stmt->fetch()) {
            $errors[] = '父分类不存在';
        }
    }

    return $errors;
}

标签: php
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Sessi…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…