php - 在 PHP 中使用 optgroup 迭代下拉列表

标签 php mysql codeigniter optgroup

我正在 CodeIgniter 中开发一个应用程序,我的下拉菜单之一包含 86 个选项,这些选项应该动态生成,我决定将它们放在 <optgroup> 中。如下图所示。

enter image description here

我已将所有这些选项存储在 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/

相关文章:

php - Laravel 奇怪的 Eloquent 错误

javascript - 发送前从输入中删除 HTML 标签

php - Laravel 应用程序无法连接到 azure 中 App 中的 MySQL

php - 在 PHP 中打印最后执行的 Mysql 查询

php - 将 DataTables 中的 aoData 数组与序列化形式相结合

javascript - jquery 禁用每个按钮

mysql - 在 node.js 中使 MySQL 的 ORDER BY 动态化

c++ - mysql 结果集为空?

php - Codeigniter 的记录行为 |显示_404()

jquery - Codeigniter session 因 ajax 调用而出错