从数据数组创建一个Optgroup

时间:2014-02-19 09:30:48

标签: php mysql arrays codeigniter

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

我有一系列数据如下:

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
    )

我想基于“运营公司名称”创建一个optgroup,因此在此示例中有2个depot位于其下方。

在我看来,我目前只使用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查询。

由于

1 个答案:

答案 0 :(得分:5)

尝试,首先重新格式化源数组,如下所示:

$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>