针对子论坛内的子论坛的PHP树遍历
我一直在开发自己的论坛大约一周,现在我几乎完成了所有的代码,但是,我陷入了一个单一的问题,我一直没能弄清楚。针对子论坛内的子论坛的PHP树遍历
嗯,简单地说我有可以在任何数量的其他子论坛内的子论坛。
我该如何使用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);
首先你需要一个终止条件。因此,将您的*论坛[链接]设置为空或“顶部”或其他内容。那么它简单地使用递归函数将你的面包屑放在一起。
因此,让我们假设您想要向Forum-One展示面包屑:论坛三: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);
我通过运行该函数直到它检测到“顶部”然后停止,从理论上看这个概念是如何工作的。我也看到如何将所有返回的信息放入数组中。但是,除了数组之外,我甚至无法使用此显示“*”值名称。我相信当返回第一个函数时它会停止(如果我删除'top'条件,它会显示第一个指定论坛的名称,所以sql select不是问题)。我将我的代码添加到了我的问题中。我误解了什么? – SineCosine 2011-01-22 05:12:04
为什么你通过你的结果数组循环?你只需要调用$ row = mysql_fetch_array($ result)一次。去除循环。 – ehudokai 2011-01-22 05:23:05