2011-11-13 36 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>