Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP进行递归树遍历-布局问题_Php_Html_Arrays_Recursion - Fatal编程技术网

使用PHP进行递归树遍历-布局问题

使用PHP进行递归树遍历-布局问题,php,html,arrays,recursion,Php,Html,Arrays,Recursion,我正在为一位客户创建一份问卷,要求将问题分为3个层次,问题数量和类别未知。我已经成功地创建了U.I.和从数据库中提取信息的代码,但是我一直在尝试找出如何将所有内容加载到正确的位置。数据库是由客户组织的,因此我无法控制它: id description parentId 1 Level 1 0 2 Level 2 0 3 Level 1a 1 4 L

我正在为一位客户创建一份问卷,要求将问题分为3个层次,问题数量和类别未知。我已经成功地创建了U.I.和从数据库中提取信息的代码,但是我一直在尝试找出如何将所有内容加载到正确的位置。数据库是由客户组织的,因此我无法控制它:

id    description    parentId    
1      Level 1        0           
2      Level 2        0           
3      Level 1a       1   
4      Level 1b       1 
5      Level 1a1      3   
我现在使用的代码是:

function printChildQuestions($parentid) {
  $sql="SELECT * FROM pB_test WHERE parentID=$parentid";
  $result=mysql_query($sql);
  $i=0;
  while (true) {
    $row=mysql_fetch_array($result);
    if (!$row) break;
    if ($row['parentId'] == 0) {
        echo '<div class="tabs">';
        echo '<span class="level1">'.$row['description'].'</span>';
        echo '<ul id="main-nav"><h2 align="center">Categories</h2></ul>';
        echo '<div>'.$row['id'].'&nbsp;'.$row['description'].'&nbsp;'.$row['parentId'].'</div>';
        if ($row['parentId'] == 1) {
        }
        echo '</div>';
    } else {
    echo '<div>'.$row['id'].'&nbsp;'.$row['description'].'&nbsp;'.$row['parentId'].'</div>';
    }
    printChildQuestions($row['id']);
  }
}

printChildQuestions(0);
需要为生成的html如下所示:


问题是,我提出的每一个想法都需要我对级别进行硬编码,并在引入级别2时中断。有人能把我推到正确的方向吗?谢谢

如果我正确理解您的问题,您是在寻找一种方法来解决客户端数据中parentId引用所隐含的级别问题吗?像这样:

Level 1           
   Level 1a          
      Level 1a1         
   Level 1b        
Level 2        
使用引用父级的父属性创建一个级别类怎么样?然后,您可以遍历客户机的数据,将级别实例解析为一个漂亮的树,然后从那里使用它执行任何操作


或者,您可以为Level类提供一个children属性,该属性将是引用该实例作为父对象的级别的集合。。。无论如何,关键是您可以用一个相当简单的类将客户机的平面数据转换成有用的树模型。通过计算父级或子级,您可以知道给定级别的树的上/下距离。

printChildQuestions是一个递归函数。听起来好像你不知道如何确定你所处的递归级别。以下是方法:

printChildQuestions($parent_id);

function printChildQuestions($parent_id, $level = 1){
    if( $need_to_recurse ){
        printChildQuestions($new_parent, $level + 1);
    }
}

如果可能的话,你能给我一个示例代码吗?我会试着重做我现在的一个,但我对这种逻辑几乎没有经验。哦,等等,你似乎已经在这个话题上有几个重叠的问题了。我所建议的是你已经得到的答案的另一种选择。在这个问题上,你似乎在攻击你项目的HTML格式部分,在这种情况下,我的答案就不那么重要了。是的,我决定在改变方法后再提出一个新问题。谢谢你的帮助!