插件窝 干货文章 php怎么循环查询子分类

php怎么循环查询子分类

分类 递归 category 输出 199    来源:    2025-03-16

在PHP中,如果你需要循环查询子分类,通常你会使用递归函数来实现。假设你有一个分类表,每个分类都有一个 id 和一个 parent_id 字段,parent_id 表示该分类的父分类ID。如果 parent_id0null,则表示该分类是顶级分类。

以下是一个简单的示例,展示如何使用递归函数来查询并循环输出所有子分类:

<?php
// 假设你已经连接了数据库,并且有一个分类表 `categories`
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');

// 获取所有分类
$stmt = $pdo->query('SELECT id, name, parent_id FROM categories');
$categories = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 构建分类树
function buildCategoryTree(array &$categories, $parentId = 0) {
    $branch = [];
    foreach ($categories as &$category) {
        if ($category['parent_id'] == $parentId) {
            $children = buildCategoryTree($categories, $category['id']);
            if ($children) {
                $category['children'] = $children;
            }
            $branch[] = $category;
            unset($category);
        }
    }
    return $branch;
}

// 构建分类树
$categoryTree = buildCategoryTree($categories);

// 递归输出分类树
function printCategoryTree($tree, $level = 0) {
    foreach ($tree as $category) {
        echo str_repeat('--', $level) . $category['name'] . "\n";
        if (!empty($category['children'])) {
            printCategoryTree($category['children'], $level + 1);
        }
    }
}

// 输出分类树
printCategoryTree($categoryTree);
?>

代码解释:

  1. 数据库连接:首先,我们使用PDO连接到数据库,并查询所有的分类数据。
  2. 构建分类树buildCategoryTree 函数递归地构建分类树。它遍历所有分类,找到 parent_id 等于当前 parentId 的分类,并将其作为子分类添加到 children 数组中。
  3. 输出分类树printCategoryTree 函数递归地输出分类树,使用 str_repeat 来缩进子分类,以便在输出时显示层次结构。

示例输出:

假设你的分类数据如下:

id | name      | parent_id
---|-----------|----------
1  | 分类1     | 0
2  | 分类2     | 0
3  | 子分类1-1 | 1
4  | 子分类1-2 | 1
5  | 子分类2-1 | 2

输出将会是:

分类1
--子分类1-1
--子分类1-2
分类2
--子分类2-1

注意事项:

  • 如果你的分类数据量很大,递归可能会导致性能问题。在这种情况下,你可以考虑使用迭代方法或其他优化策略。
  • 确保你的数据库表结构设计合理,尤其是 parent_id 字段的索引,以提高查询效率。

通过这种方式,你可以轻松地循环查询并输出所有子分类。