2011-10-17 13 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 />"; 
} 

しかし、あなたはあなたの問題に直面しようとすることは常に持っています終わりまで、あなたのすべての汗がなくなったら、助けを求めます。さもなければあなたはプログラマーの能力を高めません。考えてみてください...