2011-11-13 44 views
2

我有一個循環,顯示下拉框中的變量列表(基於過濾的類別)。我想從我的表中添加選項組(使用子類別)。我如何將它添加到我的循環的一部分?如何添加optgroup到下拉循環?

在下面的示例中,類別爲「countries」,子類別爲「continents」。我希望這些國家被列入適當的大陸optgroup。

<select id="country"> 
    <option value="">Select</option> 

<?php 
    $c_sth = $c_dbh->query ("SELECT category, subcategory, display, value 
           FROM constants WHERE category='Countries' 
           ORDER BY display"); 
    while ($row = $c_sth->fetch()) { 
     echo '<option value="'.$row['value'].'">'.$row['display'].</option>'."\n"; 
    } 
?> 

</select> 

回答

4
<?php 
$c_sth = $c_dbh->query ("SELECT category, subcategory, display, value 
          FROM constants WHERE category='Countries' 
          ORDER BY subcategory, display"); # group by category first 
$current_subcategory = ""; 
while ($row = $c_sth->fetch()) { 
    if ($row["subcategory"] != $current_subcategory) { # if category has changed 
     if ($current_subcategory != "") { # if there was already a category active 
      echo "</optgroup>"; # close it 
     } 
     echo '<optgroup label="'.$row['subcategory'].'">'; # open a new group 
     $current_subcategory = $row['subcategory']; 
    } 
    echo '<option value="'.$row['value'].'">'.$row['display'].</option>'."\n'; 
} 
echo "</optgroup>"; # close the final group 
?> 
1
<select id="country"> 
    <option value="">Select</option> 

<?php 
    $c_sth = $c_dbh->query ("SELECT category, subcategory, display, value 
           FROM constants WHERE category='Countries' 
           ORDER BY subcategory, display"); 

    $lastgroup = ""; 
    while ($row = $c_sth->fetch()) { 
     if ($lastgroup != $row['subcategory']) 
     echo '<optgroup label="'.$row['subcategory'].'">\n'; 
     echo '<option value="'.$row['value'].'">'.$row['display'].'</option>\n'; 
     if ($lastgroup != $row['subcategory']) 
     echo '</optgroup>\n'; 
     $lastgroup = $row['subcategory']; 
    } 
?> 

</select>