子论坛中子论坛的PHP树遍历

时间:2011-01-22 03:37:19

标签: php mysql database dynamic tree

我已经开发了自己的论坛大约一个星期了,我差不多已经完成了所有的代码,但是,我遇到了一个我无法弄清楚的问题。

嗯,简单地说我的子论坛可以在任何其他子论坛中。

如何使用PHP在现场动态创建任何子论坛。

创建路径后,我会在href和其他内容中使用它。

我猜我会以某种方式需要根据ID列和另一列将一个子论坛链接到另一个子论坛来遍历数据库。

我们假设我的数据库表如下所示:

ID | Name        | Link |
---+-------------+-------
1  | Forum-One   | Top  |
2  | Forum-Two   | 1    |
3  | Forum-Three | 2    |
4  | Forum-Four  | 2    | 
5  | Forum-Five  | 3    |
6  | Forum-Six   | 3    |

我将如何做到这一点 - 或者还有其他必须要做的事情吗?

我希望我足够清楚,让每个人都能理解。

编辑:

 include("inc/config.php");

 function generateBreadcrumb($startingID){

  $result = mysql_query("SELECT * FROM temp_table WHERE ID='$startingID'");

  while($row = mysql_fetch_array($result))
  {
    $db_id=$row['ID'];
    $db_name=$row['Name'];
  }

     if($db_id!='Top'){
         return generateBreadCrumb($db_id);
     } else {
         return $db_name;
     }
 }

 $startID='6';
 echo generateBreadcrumb($startID);

1 个答案:

答案 0 :(得分:1)

首先,您需要一个终止条件。因此,将您的顶级论坛[link]设置为null,或“top”或其他内容。然后它只是使用递归函数将你的面包屑放在一起。

所以我们假设您想要向Forum-One展示面包屑:论坛 - 三:论坛 - 六,更好地称为论坛 - 六。

示例代码:

 <?php
 $yourForumId = 6; // replace this dynamically with your forum;
 $breadcrumb = generateBreadcrumb($yourForum);
 function generateBreadcrumb($startingForumId){
     $sql= "SELECT Name ,link FROM Forums WHERE ID = ".$startingForumId;
     //run your $sql however you do to get results
     //assuming you get associative arrays back
     if($res['link'] != 'top'){
         return generateBreadCrumb($res['link']).":".$res['Name'];
     } else {
         return $res['Name'];
     }
 }
 echo $breadcrumb;
 ?>

这是递归,如果你是新手,可能看起来很复杂,但我希望这有帮助!

编辑:这是您需要编辑的代码......

include("inc/config.php");

 function generateBreadcrumb($startingID){

     $result = mysql_query("SELECT * FROM temp_table WHERE ID='$startingID'");

     $row = mysql_fetch_array($result);
     $db_id=$row['link'];
     $db_name=$row['Name'];

     if($db_id!='Top'){
         return generateBreadCrumb($db_id).":".$db_name;
     } else {
         return $db_name;
     }
 }

 $startID='6';
 echo generateBreadcrumb($startID);