2011-01-22 104 views
0

我一直在开发自己的论坛大约一周,现在我几乎完成了所有的代码,但是,我陷入了一个单一的问题,我一直没能弄清楚。针对子论坛内的子论坛的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); 
+0

为什么你通过你的结果数组循环?你只需要调用$ row = mysql_fetch_array($ result)一次。去除循环。 – ehudokai 2011-01-22 05:23:05

回答

1

首先你需要一个终止条件。因此,将您的顶级论坛[链接]设置为空或“顶部”或其他内容。那么它简单地使用递归函数将你的面包屑放在一起。

因此,让我们假设您想要向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); 
+0

我通过运行该函数直到它检测到“顶部”然后停止,从理论上看这个概念是如何工作的。我也看到如何将所有返回的信息放入数组中。但是,除了数组之外,我甚至无法使用此显示“顶级”值名称。我相信当返回第一个函数时它会停止(如果我删除'top'条件,它会显示第一个指定论坛的名称,所以sql select不是问题)。我将我的代码添加到了我的问题中。我误解了什么? – SineCosine 2011-01-22 05:12:04