CakePHPでセレクトボックスを作成する方法

CakePHPで数字を選択できるセレクトボックスを作成するには、公式ドキュメントにもあるようにFormHelperを使って下記のように書く。

echo $this->Form->input('field', array(
    'options' => array(1, 2, 3, 4, 5),
    'empty' => '選択してください'
));

値の数字と表示される数字がズレる

1から5ならまだこうやって書けるけど、1から100とか、1、6、11といった5つ飛ばしで書くとなると下記の書き方が非常に楽だ。

echo $this->Form->input('field', array(
    'options' => range(1, 5),
    'empty' => '選択してください'
));

でも、これだと前述した通り下記のように値と表示される数字がズレてしまいます。







この問題を解決するためにmyRange()とか独自の関数を作成する人もいるけど、既存の関数を組み合わせれば意外と簡単に問題は解決する。

array_combine()を使って配列を生成

このarray_combine()は、第1引数の配列をキー、第2引数の配列を値として、新しい配列を作る関数です。

echo $this->Form->input('field', array(
    'options' => array_combine(range(1, 5), range(1, 5)),
    'empty' => '選択してください'
));

これで、







となる。

1つ飛ばしや5つ飛ばしだって簡単に

echo $this->Form->input('field', array(
    'options' => array_combine(range(1, 21, 5), range(1, 21, 5)),
    'empty' => '選択してください'
));

こう記述すれば、







ってことだって、簡単に書けるんだな。