我希望在使用Codeigniter form_dropdown函数时以以下方式将该数组转换为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
到目前为止,我可以在optgroup中显示带有对象和子对象的"Thomas More…",但到目前为止还没有成功。
解决:我改变了从DB获取数据的方式:
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);
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;
}
让我想知道,为什么你有校园和本地的ID,在每个校区中,是否有更多的相同名称的校园和相同编号的lokalen ?在我看来,这是一个糟糕的主键实践,你能评论一下吗?
辅助函数在主数组中查找数组,而不是像链接的输入所示的stdObjects
,参见源代码:form_helper:336
你必须转换你的输入,也许像这样:
$options = array_map(function($item){
return (array)$item;
}, $options);
或者因为你的输入似乎来自一个db查询结果,使用result_array()
或row_array()
方法,而不是result()
或row()
,当你获取它们。
你应该得到一个像这样的错误,没有转换:
PHP Catchable fatal error: Object of class stdClass could not be converted to string