【问题标题】:PHP Tree Traversal For Sub Forums Within Sub Forums子论坛内子论坛的PHP树遍历
【发布时间】:2011-01-22 03:37:18
【问题描述】:

我已经开发自己的论坛大约一周了,我几乎完成了所有代码,但是,我被困在一个我无法弄清楚的问题上。

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

我将如何使用 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);

【问题讨论】:

  • 为什么要循环遍历结果数组?您只需要调用一次 $row=mysql_fetch_array($result) 。删除循环。

标签: php mysql database dynamic tree


【解决方案1】:

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

因此,假设您想显示 Forum-One:Forum-Three:Forum-Six 的面包屑,更广为人知的是 Forum-Six。

示例代码:

 <?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);

【讨论】:

  • 我通过运行该函数直到它检测到“顶部”然后停止,从理论上了解了该概念的工作原理。我还看到了如何将所有返回的信息放入一个数组中。但是除了数组之外,我什至无法使用它显示“顶级”值名称。我相信当第一个函数返回时它会停止(如果我删除“顶部”条件,它会显示第一个指定论坛的名称,所以 sql 选择不是问题)。我将我的代码添加到我的问题中。我是不是误会了什么?
  • @Anvio 除了您的结果数组之外没有其他数组。当链接 != 'top' 时,您错过了通话的最后一部分。
  • 哈,有道理。但我似乎仍然没有显示任何结果。如果你要问的话,我确实将我的 DB 的 Forum-One 链接更改为 Top。
  • 哦,我错过了一些东西。您需要查看链接列,而不是 ID。现在更新代码。
  • 哈哈也没听懂——有点晚了。现在完美运行,非常感谢您在此期间一直支持我。万岁学习新东西!
猜你喜欢
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多