【问题标题】:Recursive tree traversal with PHP - layout issue使用 PHP 进行递归树遍历 - 布局问题
【发布时间】:2012-06-15 23:02:53
【问题描述】:

我正在为一位客户创建一份问卷,该问卷需要按 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在这里:http://jsfiddle.net/Cyb2N/

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

【问题讨论】:

    标签: php html arrays recursion


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 如果可能的话,你能给我一个示例代码吗?我会尽力重做我现在拥有的那个,但我对这种逻辑几乎没有经验。
    • 哦,等等,您似乎已经有几个关于这个主题的重叠问题了。我的建议是替代您已经获得的this question 的答案。在这个问题中,您似乎在攻击项目的 HTML 格式部分,在这种情况下,我的回答不太相关。
    • 是的,一旦我改变了方法,我决定提出一个新问题。不过感谢您的帮助!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2021-11-03
      • 1970-01-01
      • 2021-12-10
      • 2018-07-12
      • 2014-03-11
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      相关资源
      最近更新 更多