2013-10-23 78 views
0

我正在CodeIgniter中開發一個應用程序我的一個下拉列表由86個選項組成,這些選項應該是動態生成的,我決定讓它們在<optgroup>中,如下面的截圖所示。用PHP中的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) 
+0

很好。祝你好運 – Bojangles

+0

在這裏拋出一塊骨頭......你的數據結構是什麼樣的?作品中是否有任何迭代代碼? –

+0

所以,如果你閱讀了form_dropdown的手冊,你會看到如何設置optgroups的參數 – jmadsen

回答

1

即使你提到不包含所需的數據表,有達到你想達到什麼樣的一個非常基本的原則:

  • 查詢應該形成<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 

你的數據庫查詢需要按組(和選項之後可選)排序otherwhise你可能會得到這樣的事情:

Group 1 
    1 
Group 2 
    3 
Group 1 
    2 
+0

謝謝dognose,你今天節省了我的時間.. :-) – vkrams

0

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;