2011-10-17 55 views
0

我有一個問題,我無法想到一個合乎邏輯的方法來克服。我有一個類似的表:從MySQL數據庫創建一系列下拉框

+-------------+--------------+---------------+ 
| id   | catName  | parentId  | 
+-------------+--------------+---------------+ 
| 1   | Category 1 | 0   | 
| 2   | Category 2 | 0   | 
| 3   | Sub Cat 1 | 1   | 
| 4   | Sub Cat 2 | 1   | 
| 5   | Sub sub cat 1| 4   | 
| 6   | Sub sub cat 2| 4   | 
| 7   | Category 3 | 0   | 
+-------------+--------------+---------------+ 

我需要寫一個PHP函數來輸出與所選擇的父類的一系列的下拉框。例如:

如果我通過該函數的ID 5以下HTML結構將輸出:

<select name="level-1"> 
    <option selected="selected">Category 1</option> 
    <option>Category 2</option> 
    <option>Category 3</option> 
</select> 

<select name="level-2"> 
    <option>Sub Cat 1</option> 
    <option selected="selected">Sub Cat 2</option> 
</select> 

<select name="level-3"> 
    <option selected="selected">Sub sub cat 1</option> // This is the category with id=5 
    <option>Sub sub cat 1</option> 
</select> 

這是很難找到一種方式問這個問題,所以如果我沒有把我的100 %清楚,請不要往下投我,只問我會解釋

+1

到目前爲止,你有什麼嘗試?這不是特別困難。獲取/構建父類別,然後循環獲取/輸出每個子類別... –

+0

我還沒有嘗試過任何東西,我想不出它的邏輯 –

+0

PHP邏輯? SQL? –

回答

0

你需要建立一個遞歸函數,類似如下:

function recursive_dropdown($category_id) { 
    $category = // fetch category from database 
    echo '<option value="'. $category['id'] .'">'. $category['name'] .'</option>'; 

    $parent = // fetch it's parent 
    if(// parent exists) { 
     return recursive_dropdown($parent['id']); 
    } 
    return true; // done! 
} 

---編輯這是基本的遞歸,你將不得不根據你的需要調整它......原理是一樣的

+0

我無法得到這個工作:請問你能擴大這個答案嗎? –

0

我喜歡在需要生成下拉菜單時使用助手函數。

這個PHP函數:

function CreateDropdown($name, $array, $selected="") 
{ 
    $result = "<select name='$name'>"; 

    foreach ($array as $key => $value) { 
     $result .= "<option value='$key'"; 
     if ($key == $selected) 
      $result .= " selected='selected'"; 
     $result .= ">"; 
     $result .= $value."</option>"; 
    } 

    $result .= "</select>"; 
    return $result; 
} 

echo CreateDropdown('level-1', 
        array(1=>'category 1', 2=>'category 2', 3=>'category 3'), 
        3); 

?> 

生成此HTML:

<select name='level-1'> 
    <option value='1'>category 1</option> 
    <option value='2'>category 2</option> 
    <option value='3' selected='selected'>category 3</option> 
</select> 
0

我覺得在一些這樣的:

$id = 5; // Your ID 

// DB data => ID - Description - Category 
$data = array(
1 => array("Category 1", 0), 
2 => array("Category 2", 0), 
3 => array("Sub Cat 1",  1), 
4 => array("Sub Cat 2",  1), 
5 => array("Sub sub cat 1", 4), 
6 => array("Sub sub cat 2", 4), 
7 => array("Category 3", 0)); 

$dds = array(); // Array that will hold the result 

function reverse_recursively($id, $data, &$dds) 
{ 
    $dd = "<select>"; // Open select tag 
    $cat = $data[$id][1]; // Find the current category 

    foreach ($data as $i => $d) // Fetch data 
    { 
     if ($d[1] == $cat) // If is in the category 
     { 
      $sel = $id == $i ? " selected='selected'" : ""; 

      // The option tag 
      $dd.= " 
       <option value='$i'$sel>" . $d[0] . "</option>"; 
     } 
    } 

    $dds[] = $dd . "</select>"; // Close select tag 

    if ($cat != 0) // Category 0(zero) means the end so it have to be diferent to proceed. 
     reverse_recursively($cat, $data, $dds); 
} 

reverse_recursively($id, $data, $dds); 

// In each DDS item you got the dropdown ;-) 
foreach ($dds as $dropdown) 
{ 
    echo $dropdown . "<br /><br />"; 
} 

但是你必須總是試圖去面對你的問題'直到最後,如果你所有的汗水都用完了,那麼你請求幫助。否則,你永遠不會發展你的程序員能力。想想...

相關問題