がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

「PHPにおける」Webからの配列の取得方法

なんか書いてたつもりが書いてなかったので、一応。
Webで、特にcheckboxなどでありがちなのですが。


<input type="checkbox" name="food" value="meet">肉が好き<BR>
<input type="checkbox" name="food" value="fish">魚が好き<BR>
<input type="checkbox" name="food" value="cereals">穀類が好き<BR>
なんていう入力項目がありますと。チェックを入れた分が、例えばgetですと、

?food=meet&food=fish&food=cereals
なんて風に渡ってきます。ここまではHTTP上の挙動なのでどこも一緒です(PHPでも一緒。念のため)。
他言語は普通に切った張ったして情報を保持するだけなので問題ないのですが、上述、PHPですと、cerealsしか取得できません。
例えばPerlあたりからとかJavaとかC++とかからお越しになったお客様は、大抵ここで混乱します。「出来ません」とかいう実も蓋もない回答を時々掲示板の類で拝見すらします。
回答から行くと、出来ます。
まずは http://www.php.net/manual/ja/faq.html.php#faq.html.arrays をご覧ください。
以下、少々引用を。

3. HTML フォームで配列を使用するにはどうすればよいですか?


フォームの内容を PHP スクリプトで配列として受け取るには、 <input>、<select> あるいは <textarea> といった要素の name を以下のように指定します:


<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyArray[]" />
変数名の最後にある括弧に注意してください。これにより、フォー ムの内容が配列として扱われます。異なる要素に同じ名前をつけること で要素を配列にグループ分けすることができます。

<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyOtherArray[]" />
<input name="MyOtherArray[]" />
上記の HTML の場合、MyArray と MyOtherArray という 2 つの配列が生成され、 PHP スクリプトに送信されます。また、配列に特定のキーを設定する こともできます。

<input name="AnotherArray[]" />
<input name="AnotherArray[]" />
<input name="AnotherArray[email]" />
<input name="AnotherArray[phone]" />
この場合、配列 AnotherArray のキーは 0、1、email そして phone となります。
注意: HTML に配列のキーを指定するかどうかは自由です。キーを指定しなかった 場合はフォームに現れる順番に番号がつけられます。最初の例だと、 キーは 0、1、2、3 となります。

………すごいですね。昔始めてこの手法を見聞きしたときはてっきり「抜け道的手法」なんだろうとか思ってましたが。PHP君、真顔で仕様です。
ましてや「自分でキーが設定できる」とかなんとか。独自路線暴走中です。暴走なんだか迷走なんだかよくわかりませんが。
一応。前述の例題は


<input type="checkbox" name="food[]" value="meet">肉が好き<BR>
<input type="checkbox" name="food[]" value="fish">魚が好き<BR>
<input type="checkbox" name="food[]" value="cereals">穀類が好き<BR>
ってやると、foodっていう名前で「配列で取得」が可能になります。
PHPに移動する方はご注意を。あとPHPから「ほかの言語に」移動する方もご注意を。