![](/img/trans.png)
[英]how to wrap optgroup labels around php array values in dropdown list
[英]Iterating dropdown list with optgroup in PHP
我正在CodeIgniter中开发应用程序。我的下拉列表之一包含应该动态生成的86个选项,我决定将其设置为<optgroup>
,如以下屏幕截图所示。
我已经将所有这些选项存储在mysql数据库中。 现在我的问题是我想使用foreach()
循环来迭代这些选项,以便为每个组显示组标签。 (在屏幕快照Education,Hospitality中)。 我不喜欢对这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
这个:
<?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
在codeigniter中具有动态下拉列表的optgroup可能像这样:
//SANI: dropdown with optgroup
$result = $this->db->query("SELECT * FROM tbl_classes WHERE cls_id > '".$classId."'");
$return = array('' => '-- Select Class -- ');
if($result->num_rows() > 0)
{
foreach($result->result_array() as $row)
{
$resSec = $this->db->query("SELECT * FROM tbl_section WHERE sec_cls_id = '".$classId."'");
if($resSec->num_rows() > 0)
{
foreach($resSec->result_array() as $sec)
{
$return[$row['cls_name']][$sec['sec_id']] = $sec['sec_name'];
}
}
}
}
return $return;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.