2014-02-19 279 views
1

我正在使用Codeigniter来查询我的数据库并返回数据数组。从数据数组创建一个Optgroup

我有一组数据,像这样:

Array 
(
[0] => stdClass Object 
    (
     [depot_id] => 1 
     [depot_name] => Stockton On Tees 
     [depot_description] => Arriva Stockton on Tees Depot 
     [depot_postcode] => TS18 3AW 
     [depot_lat] => 
     [depot_long] => 
     [operating_company_id] => 1 
     [date_created] => 2014-02-14 10:24:17 
     [date_edited] => 
     [edited_by] => 
     [status] => active 
     [operating_company_name] => Arriva North East 
     [operating_company_description] => Arriva North East 
     [operating_company_lat] => 
     [operating_company_long] => 
     [operating_company_postcode] => 
     [operating_group_id] => 1 
    ) 

[1] => stdClass Object 
    (
     [depot_id] => 2 
     [depot_name] => Darlington 
     [depot_description] => Arriva Darlington Depot 
     [depot_postcode] => DH1 1TW 
     [depot_lat] => 
     [depot_long] => 
     [operating_company_id] => 1 
     [date_created] => 2014-02-14 10:24:17 
     [date_edited] => 
     [edited_by] => 
     [status] => active 
     [operating_company_name] => Arriva North East 
     [operating_company_description] => Arriva North East 
     [operating_company_lat] => 
     [operating_company_long] => 
     [operating_company_postcode] => 
     [operating_group_id] => 1 
    ) 

[2] => stdClass Object 
    (
     [depot_id] => 3 
     [depot_name] => Ashington 
     [depot_description] => Arriva Ashington Depot 
     [depot_postcode] => NE63 9UN 
     [depot_lat] => 
     [depot_long] => 
     [operating_company_id] => 2 
     [date_created] => 2014-02-14 10:46:05 
     [date_edited] => 
     [edited_by] => 
     [status] => active 
     [operating_company_name] => Arriva Northumbria 
     [operating_company_description] => Arriva Northumbria 
     [operating_company_lat] => 
     [operating_company_long] => 
     [operating_company_postcode] => 
     [operating_group_id] => 1 
    ) 

[3] => stdClass Object 
    (
     [depot_id] => 4 
     [depot_name] => Blyth 
     [depot_description] => Arriva Blyth Depot 
     [depot_postcode] => NE24 2AP 
     [depot_lat] => 
     [depot_long] => 
     [operating_company_id] => 2 
     [date_created] => 2014-02-14 10:46:05 
     [date_edited] => 
     [edited_by] => 
     [status] => active 
     [operating_company_name] => Arriva Northumbria 
     [operating_company_description] => Arriva Northumbria 
     [operating_company_lat] => 
     [operating_company_long] => 
     [operating_company_postcode] => 
     [operating_group_id] => 1 
    ) 

我想所以在这个例子中有2个仓库落在它下面创建基于“运营公司名称”的OPTGROUP。

在我看来,我目前只是使用foreach循环来创建下拉菜单。

  <select name="depot_id" class="form-control"> 
      <?php foreach($depots as $depot): ?> 
        <optgroup label="<?php echo $depot->operating_company_name; ?>"> 
         <option value="<?php echo $depot->depot_id; ?>"><?php echo $depot->depot_name; ?></option> 
        </optgroup> 
      <?php endforeach; ?> 
     </select> 

这如下产生下拉....

Dropdown Optgroup

我(如果可能)在循环如何可以把每一个工作组和车厂在一起吗?

如果需要,可以给我的MySQL查询。

感谢

+0

我认为你将不得不使用双的foreach循环来创建你想要的 – Newbi3

+0

试试这个:http://ellislab.com/forums/viewthread/129610/#639772 –

+0

嗨@ Newbi3我是双重循环虽然? – StuBlackett

回答

4

试试,先重新格式化源阵列象下面这样:

$result = array(); 
foreach($depots as $depot){ 
    $result[$depot->operating_company_name][] = $depot; 
} 

然后创建选择尝试,

<select name="depot_id" class="form-control"> 
      <?php foreach($result as $key=>$val): ?> 
        <optgroup label="<?php echo $key; ?>"> 
         <?php foreach($val as $option): ?> 
         <option value="<?php echo $option->depot_id; ?>"><?php echo $option->depot_name; ?></option> 
         <?php endforeach; ?> 
        </optgroup> 
      <?php endforeach; ?> 
     </select> 
+0

Absolutley精湛!感谢那 – StuBlackett