2011-01-22 106 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