我有一张桌子 products_tbl
+----------+-----------+---------------+
|product_id|ProductName|ProductCategory|
+----------+-----------+---------------+
|1 |Apple |fruits |
|2 |Orange |fruits |
|3 |Iphone X |Electronics |
|4 |FJ-Eye Lens|Accessories |
+----------+-----------+---------------+
我想使用 HTML SELECT OPTION
在单独的组中显示每个类别项目products.php
$productQ = "SELECT * FROM products_tbl ";
try {
$stmt2 = $db->prepare($productQ);
$stmt2->execute();
} catch(PDOException $ex) {
die("Failed to run Query: " . $ex->getMessage());
}
$produtsrows = $stmt2->fetchAll();
echo"<select>";
foreach($produtsrows as $prow):
echo "<optgroup label=".$prow['ProductCategory'].">";
echo" <option>".$prow['ProductName']."</option>
</optgroup>";
endforeach;
echo "
</select>
";
它像这样显示
fruits
Apple
fruits
Orange
Electronics
Iphone X
Accessories
FJ-Eye Lens
答案 0 :(得分:0)
您需要更改foreach循环,以使其在与上一个相同时不输出类别名称:
$last_cat = "";
foreach($produtsrows as $prow):
if (($cat = $prow['ProductCategory']) != $last_cat) {
if ($last_cat != "") echo "</optgroup>\n";
echo '<optgroup label="'.$cat.'">' . "\n";
$last_cat = $cat;
}
echo" <option>".$prow['ProductName']."</option>\n";
endforeach;
echo "</optgroup>\n";
输出(用于您的数据)
<optgroup label="fruits">
<option>Apple</option>
<option>Orange</option>
</optgroup>
<optgroup label="Electronics">
<option>Iphone X</option>
</optgroup>
<optgroup label="Accessories">
<option>FJ-Eye Lens</option>
</optgroup>
答案 1 :(得分:0)
我对您的代码做了一些更改:
ORDER BY ProductCategory ASC
首先请注意,我添加了<optgroup>
,以确保所有具有相同类别的产品始终在一起。
下一步,仅当类别与上一项不同时,才添加volatile
标签。
请注意,我假设所有产品都具有有效的类别。如果您的类别为空,则产生的html将被弄乱。