首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级别PHP分类循环

多级别PHP分类循环
EN

Stack Overflow用户
提问于 2022-08-10 00:06:58
回答 1查看 35关注 0票数 0

我有一个困难的时间显示一个类别的列表,这可能是或可能不是在类别列表中的最后一个孩子。请看下面我的当前代码。

代码语言:javascript
复制
 <?
 $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)){
  // DISPLAY ERROR                                      
 }
                                
mysqli_stmt_execute($stmt);
$resultData = mysqli_stmt_get_result($stmt);
while($row = mysqli_fetch_assoc($resultData)){
                                        
    $cat_id = $row['cat_id'];
    $cat_name = $row['cat_name'];
    
?>
    <h3><? echo $cat_name; ?></h3>
    
<?
   $sub_cat_list = retCatList($conn, $cat_id);
   while($SubCat = mysqli_fetch_assoc($sub_cat_list)){
                                            
         $cat_id = $SubCat['cat_id'];
         $cat_name = $SubCat['cat_name'];
                                            
?>
    <h3 style="text-indent: 20px;"><? echo $cat_name; ?></h3>
<?
            }
  }
?>

以上只是示例代码,函数与第一条语句几乎完全一样,尽管使用ID并搜索任何子类别。这可以很好地显示顶级类别及其子类,但我想要做的是显示可能添加到顶级类别子级的子级。

因此,从这一点来看:

代码语言:javascript
复制
PARENT 1
   CHILD 1.1
   CHILD 1.2
PARENT 2 
   CHILD 2.1
   CHILD 2.2

对此:

代码语言:javascript
复制
 PARENT 1
     CHILD 1.1
       SECOND CHILD 1.1.1
       SECOND CHILD 1.1.2
     CHILD 1.2
   PARENT 2
      CHILD 2.1
        SECOND CHILD 2.1.1

该表使用来自Cat_id的ID,并将其添加到其子表的Cat_parent_id中。我希望这是有意义的,我试图找出要运行什么样的循环,或者如何将ID添加到该循环中,直到没有子循环为止,以及如何找到运行它的次数?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-10 00:59:28

我还没有能够充分测试这个数据库,但希望这将给您一个新的起点,您正在寻找的。

代码语言:javascript
复制
<?php

function outputCategory($parent_id, $indent = 0){
    global $conn;

    $sql = "SELECT * FROM `categories` WHERE `cat_parent_id` = ? ORDER BY `cat_name` ASC;";

    $stmt = mysqli_stmt_init($conn);
    // bind integer value $parent_id
    mysqli_stmt_bind_param($stmt, "i", $parent_id);
            
    if(!mysqli_stmt_prepare($stmt, $sql)){
        // error
        return;
    }
                                    
    mysqli_stmt_execute($stmt);
    $resultData = mysqli_stmt_get_result($stmt);

    if(mysqli_stmt_num_rows($stmt) === 0){
        // no categories with this parent
        return;
    }

    while($row = mysqli_fetch_assoc($resultData)){
        $cat_id = $row["cat_id"];
        $cat_name = $row["cat_name"];

        echo "<h3 style=\"text-indent: {$indent}px\">{$cat_name}</h3>";

        // recursion
        outputCategory($cat_id, $indent + 20);
    }
}

// initial case - parent_id = 0
outputCategory(0);

注意:如果您想传递连接而不是使用$conn,也可以添加一个global $conn;参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73299312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档