使用codeigniter将多维数组转换为使用optgroup的下拉列表时出现问题

时间:2013-03-15 14:06:05

标签: php codeigniter

我希望在使用Codeigniter form_dropdown函数时以下列方式将this array转换为optgroup。

<select>
  <optgroup label="Thomas More Kempen">
    <option value="22">D001</option>
    <option value="23">D002</option>
  </optgroup>
  <optgroup label="Thomas More Geel">
    <option value="2">G001</option>
    <option value="8">A102</option>
  </optgroup>
</select>
value is lokaalId

到目前为止,我可以在带有对象ad chlildren的optgroup中显示“Thomas More ...”,但到目前为止还没有骰子。

解决: 我改变了从数据库获取数据的方式:

function getAllMetCampus() {
        $this->load->model('campus_model');
        $alleCampussen = $this->campus_model->getAll();

        foreach ($alleCampussen as $campus) {
            $lokalen = $this->getAllOnCampusId($campus->id);
            foreach($lokalen as $key=>$value){
                unset($lokalen[$key]);
                $lokalen[$value->lokaalId] = $value->lokaalNr;
            }
            $result[$campus->naam] = $lokalen;
        }
        return $result;
    }

然后我只是echo form_dropdown($result);

2 个答案:

答案 0 :(得分:1)

辅助函数正在查找主数组中的数组,而不是链接的输入显示的stdObjects,请参阅来源:form_helper:336

您必须转换输入,可能是这样的:

$options = array_map(function($item){
    return (array)$item;
}, $options);

或者由于您的输入似乎来自数据库查询结果,因此在您获取它们时,请使用result_array()row_array()方法,而不是result()row()

您应该收到这样的错误,而不进行转换:

PHP Catchable fatal error:  Object of class stdClass could not be converted to string

答案 1 :(得分:0)

Optgroups在codeigniter中并不难:

如果你想要这个:

<select>
  <optgroup label="Thomas More Kempen">
    <option value="22">D001</option>
    <option value="23">D002</option>
  </optgroup>
  <optgroup label="Thomas More Geel">
    <option value="2">G001</option>
    <option value="8">A102</option>
  </optgroup>
</select>

你可以像这样循环你的数组:

function getAllMetCampus() {
        $this->load->model('campus_model');
        $alleCampussen = $this->campus_model->getAll();
        $options = array();

        foreach ($alleCampussen as $campus) {
            $options[$campus->naam] = array();

            $lokalen = $this->getAllOnCampusId($campus->id);
            foreach($lokalen as $lokaal){
                $options[$campus->naam][$lokaal->lokaalId] = $lokaal->lokaalNr
            }
        }
        return $options;
    }

让我想知道,为什么你有校园和lokaal的身份证, 是否有更多的同名校园和lokalen在每个校园都有相同的数字?对我来说,对于主键看起来是一个糟糕的实践,你能对此发表评论吗?