m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

FuelPHPとViewForm\FieldSetで、select要素を生成するのに渡す連想配列の作り方がわからない→解決!

 間が開いてしまいましたが、FuelPHPでのシステム開発は継続しております。

 「fuelphpのfieldsetがもったいないので拡張してみた | エンジニア開発記」という記事を見て「これだ!」と飛びついてみたのはいいものの、select要素を作るのにちょっと困っています。

 Model_Crud継承のモデルからfind()メソッドで'select','where','order_by'を与えて得ている結果オブジェクト($result_foo)を、「$form = ViewForm\Fieldset::forge();」して「$form->add_select('foo_'.$lno, 'foo', $foo_options);」なんて記述して引き渡そうとしているのですが、ちょっとした問題に遭遇しています。

$result_foo = Model_Foo::find(array(
    'select' => array('foo_id', 'foo_name'),
    'where' => array(),
    'order_by' => array(),
));

foreach ($result_foo as $rec)
{
    $foo_options{$rec['foo_id']} = $rec['foo_id'].' : '.$rec['foo_name'];
} 

 ってやれば連想配列として$foo_optionsに蓄えられると思っていたのですが、生成されたソースを見ると単純配列扱いになっていて、foo_idをキーに与えている意味がなかったのです。

 変数に突っ込んだ順番にキーが1,2,3,…になってしまって、せっかくfoo_idが離散した数値なのに無視されています。途中にvar_dump($foo_options)って試しに書いてみたら、綺麗にキーが1,2,3,…になっているのがわかり、これが原因だと思うのですが。

 どなたか、解決方法をご存じないでしょうか?

【追記】解決しました。

  「[PHP]連想配列を追加する方法 | プログラミング | アイスケット | 神奈川県相模原市の成功するホームページ制作・SEO・運用サービスを提供する会社」の記事にある通り、連想配列を追加する書き方が間違っていたことがわかりました。

 つまり、上記の例で行くとこうなります。

foreach ($result_foo as $rec)
{
    $foo_options += array( $rec['foo_id'] => $rec['foo_id'].' : '.$rec['foo_name'] );
} 

 

 そんな発想、思いつきませんでした。

 単純に、FuelPHPのことでもなくPHPのことが原因だったのが恥ずかしいところです。大変お騒がせしました。