使用codeigniter将多维数组转换为optgroup下拉列表时遇到问题


Trouble converting multi-dimensional array to dropdown with optgroup using codeigniter

我希望在使用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