嵌套关联的数据结构

时间:2013-03-05 21:47:43

标签: php algorithm data-structures nested nested-loops

首先,请不要因为我是编程和PHP新手而激怒我。我是一名学生,试图在教室里走出舒适的基础,继续我的第一个项目。我已经进行了搜索,我的问题是我甚至不确定如何说出我正在寻找的内容,如果我忽略了一个简单的解决方案,我很好奇。我已经尝试搜索“嵌套”或“树”的每个变体,我认为这些变体会与此问题相关联,但在查找能够回答我问题的内容时遇到问题。

我试图列出其他成员在嵌套树中推荐的成员,即如果约翰赞助玛丽,迈克,汤姆和迈克赞助梅根和苏珊,苏珊赞助贝蒂和米歇尔我希望能够展示一些东西像:

  1. 约翰
    • 玛丽
    • 麦克
      • 梅根
      • 苏珊
        • 贝蒂
        • 米歇尔
    • 汤姆
  2. 我希望能够指定搜索的深度,例如我只需要显示5级深度。为此,我想到了for (i=0;i<=4;i++)

    $query = "SELECT fname, lname, user_id FROM USER WHERE sponsor_id = (SELECT user_id FROM USER WHERE username = '$_SESSION[username]')";
    $result = mysqli_query($con, $query); 
    
    while ($row = mysqli_fetch_row($result)) {
      echo "<ul><li>$row[0] $row[1]</li>";
      $subquery = "SELECT fname, lname, user_id FROM USER WHERE sponsor_id = '$row[2]'";
      $subresult = mysqli_query($con, $subquery);
      while ($row2 = mysqli_fetch_row($subresult)) {
        echo "<ul><li>$row2[0] $row2[1]</li></ul>";
      }     
    }
    

    这是我最后一次尝试找出一般所需的结构并不完全有效。我很确定如果我想让这个更深入并进一步嵌套,我可以在任何级别上完成这项工作,但如果我想返回100个级别怎么样......似乎有一个我只是忽略的简单结构。

    任何指导都会受到赞赏,如果您知道如何搜索我正在寻找的内容,即使是帮助解释这一点的链接我也乐意阅读和学习自己,谢谢!!


    我在阅读了所有人的评论并进行了大量搜索后找到了答案。我正在寻找的是邻接列表或闭包表。我在此找到的最佳信息是http://www.slideshare.net/billkarwin/models-for-hierarchical-data。感谢大家的信息!

1 个答案:

答案 0 :(得分:0)

您需要的通常称为B+ tree。每个节点都有子节点,但未预设子节点数。因此,一个节点可能有5个孩子,而另一个节点有3个孩子,另一个节点有另外一个节点。要了解not preset的含义,请与n-ary tree进行对比。 n-ary tree是一棵树,其中每个节点的子节点数已知(即预设)。例如,Bin-ary表示每个节点都有两个子节点。在您的情况下,您可以决定使用n-ary树,这意味着您将使用预设大小的子数组。你的结构可能最终变得稀疏。发生这种情况,更改为B+,以便每个子数组都有自己的大小。

请注意,您不需要图表,因为每个人可能只有一个赞助商(即一个父母)。