我希望在使用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);
答案 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在每个校园都有相同的数字?对我来说,对于主键看起来是一个糟糕的实践,你能对此发表评论吗?