0

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で「ThomasMore ...」を表示できましたが、これまでのところサイコロはありません。

解決済み: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);

4

2 に答える 2

1

stdObjectsヘルパー関数は、リンクされた入力が示すようにメイン配列内の配列を探していません。ソースを参照してください: form_helper:336

入力を変換する必要があります。おそらく次のようになります。

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

または、入力が db クエリの結果から来ているように見えるため、取得するときにorの代わりにresult_array()orメソッドを使用します。row_array()result()row()

変換せずに、次のようなエラーが発生するはずです。

PHP Catchable fatal error:  Object of class stdClass could not be converted to string
于 2013-03-16T16:29:16.147 に答える
1

コードイグナイターでは、オプトグループはそれほど難しくありません。

これが必要な場合:

<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を持っているのだろうか、各キャンパスに同じ名前のキャンパスと同じ番号のロカレンの行がもっとあるのですか?私には主キーの悪い習慣のように思えますが、これについてコメントできますか?

于 2017-08-04T08:45:13.550 に答える