You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多级分类循环实现问题:如何展示无限层级子分类

实现无限层级分类展示的解决方案

要实现无限层级分类,最直接的方式是用递归函数——让函数自己调用自己,不断处理当前分类的子分类,直到没有子分类为止。以下是具体实现步骤:

1. 编写递归渲染函数

创建一个递归函数,负责渲染指定父ID下的所有子分类,同时通过$indent参数控制缩进量,实现层级视觉区分:

<?php
function renderCategories($conn, $parentId, $indent = 20) {
    // 获取当前父ID下的子分类
    $sub_cat_list = retCatList($conn, $parentId);
    while($subCat = mysqli_fetch_assoc($sub_cat_list)) {
        // 输出带缩进的分类名称
        ?>
        <h3 style="text-indent: <?php echo $indent; ?>px;"><?php echo $subCat['cat_name']; ?></h3>
        <?php
        // 递归调用,处理当前分类的子分类,缩进增加20px
        renderCategories($conn, $subCat['cat_id'], $indent + 20);
    }
}
?>

2. 修改原有代码调用递归函数

保留顶级分类的查询逻辑,输出顶级分类后,调用递归函数处理其下的所有子分类:

<?php
$sql = "SELECT * FROM categories WHERE cat_parent_id = '0' ORDER BY cat_name ASC;";
$stmt = mysqli_stmt_init($conn);
        
if(!mysqli_stmt_prepare($stmt, $sql)){
    // 这里添加错误处理逻辑
    die("SQL prepare failed");
}
                                
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);

while($row = mysqli_fetch_assoc($resultData)){
    $cat_name = $row['cat_name'];
    $cat_id = $row['cat_id'];
    ?>
    <!-- 输出顶级分类,无缩进 -->
    <h3><?php echo $cat_name; ?></h3>
    <?php
    // 调用递归函数,处理当前顶级分类的所有子分类,初始缩进20px
    renderCategories($conn, $cat_id, 20);
}
?>

关键说明

  • 递归函数的核心是:处理完当前分类后,立即调用自身处理该分类的子分类,直到retCatList返回空结果集(没有子分类)时停止递归。
  • $indent参数控制每一层级的缩进量,你可以根据需求调整每次增加的像素值,或者改用margin-left等其他样式属性。
  • 确保retCatList函数能正确根据传入的父ID返回对应的子分类结果集,函数逻辑示例:
<?php
function retCatList($conn, $parentId) {
    $sql = "SELECT * FROM categories WHERE cat_parent_id = ? ORDER BY cat_name ASC;";
    $stmt = mysqli_stmt_init($conn);
    mysqli_stmt_prepare($stmt, $sql);
    mysqli_stmt_bind_param($stmt, "i", $parentId);
    mysqli_stmt_execute($stmt);
    return mysqli_stmt_get_result($stmt);
}
?>

内容的提问来源于stack exchange,提问作者Snappysites

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:15:37