在PHP中,如果你需要循环查询子分类,通常你会使用递归函数来实现。假设你有一个分类表,每个分类都有一个 id
和一个 parent_id
字段,parent_id
表示该分类的父分类ID。如果 parent_id
为 0
或 null
,则表示该分类是顶级分类。
以下是一个简单的示例,展示如何使用递归函数来查询并循环输出所有子分类:
<?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);
?>
buildCategoryTree
函数递归地构建分类树。它遍历所有分类,找到 parent_id
等于当前 parentId
的分类,并将其作为子分类添加到 children
数组中。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
字段的索引,以提高查询效率。通过这种方式,你可以轻松地循环查询并输出所有子分类。