我正在 CodeIgniter 中开发一个应用程序,我的下拉菜单之一包含 86 个选项,这些选项应该动态生成,我决定将它们放在 <optgroup>
中。如下图所示。
我已将所有这些选项存储在 mysql 数据库中。现在我的问题是我想使用 foreach()
迭代这些选项循环以便为每个组显示组标签。 (在屏幕截图中,教育、酒店业)。我不喜欢硬编码这 86 个选项的方式。有人可以帮我解决这个问题吗?
编辑
这是我的 MySQL 表。我提到的是教育列表而不是职业列表。但表结构是一样的。
mysql> select * from wededucationlist limit 10;
+-------+---------------------------+
| eduid | education |
+-------+---------------------------+
| 1 | Aeronautical Engineering |
| 2 | B Arch |
| 3 | BCA |
| 4 | BE/B-Tech |
| 5 | B Plan |
| 6 | BSc IT / Computer Science |
| 7 | Other Bachelor Degree |
| 8 | M Arch |
| 9 | MCA |
| 10 | ME |
+-------+---------------------------+
10 rows in set (0.00 sec)
最佳答案
即使您提到的表不包含所需的数据,也有一个非常基本的原则可以实现您想要实现的目标:
- 查询应构成
<options>
的所有行并添加第二列,即<optgroup>
.
像这样:
Option 1 | Group 1
Option 2 | Group 1
Option 3 | Group 2
Option 4 | Group 3
- 迭代所有选项,每当组发生更改时,打印出一个 optgroup:
这个:
<?php
$data = array(array("option" => 1, "group" => "Group 1"),
array("option" => 2, "group" => "Group 1"),
array("option"=>3, "group" => "Group 2"));
$priorGroup = "";
echo "<select>";
foreach ($data AS $entry){
if ($entry["group"] != $priorGroup){ //Start new optgroup if group changed.
if ($priorGroup != ""){ //close prior optgroup if prior group WAS set.
echo "</optgroup>";
}
echo "<optgroup label='{$entry["group"]}'>";
}
echo "<option>{$entry["option"]}</option>"; //show option(s)
$priorGroup = $entry["group"]; //update priorGroup.
}
echo "</optgroup></select>"; //close last optgroup + select.
?>
将输出:
Group 1
1
2
Group 2
3
您的数据库查询需要按组排序(然后可以按选项排序),否则您可能会得到如下结果:
Group 1
1
Group 2
3
Group 1
2
关于php - 在 PHP 中使用 optgroup 迭代下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553505/