当前位置:首页 > 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实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $imag…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUT…