0

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

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在这里:http: //jsfiddle.net/Cyb2N/

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

4

2 回答 2

0

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

Level 1           
   Level 1a          
      Level 1a1         
   Level 1b        
Level 2        

如何创建一个具有引用父级别Level的属性的类?parent然后,您可以遍历客户端的数据,将 Level 实例解析为一棵漂亮的树,然后从那里做任何您想做的事情。

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

于 2012-06-13T02:18:09.883 回答
0

printChildQuestions 是一个递归函数。听起来您不知道如何确定您所处的递归级别。就是这样:

printChildQuestions($parent_id);

function printChildQuestions($parent_id, $level = 1){
    if( $need_to_recurse ){
        printChildQuestions($new_parent, $level + 1);
    }
}
于 2012-06-13T02:18:21.623 回答