2009年11月 4日

並び順。

お仕事中に同僚さんから
例えば checkbox とかで、同じ name で、value がいくつも渡される場合
perl だと、どういう順番で値を取得するのか?という質問を受ける。


つまり、<input type="checkbox" name="test" value="2" /> の次が
<input type="checkbox" name="test" value="1" /> と並んでた場合、
両方をチェックしてGET/POSTした時、
この出現順というか、並び順通りに 2 1 の順番で
例えば、配列に格納したり出来るのか?って事なんですが。

GET なり、POST なり、どちらにしても
キー=値&キー=値 の文字列で送られる訳なので、
つまりは、test=2&test=1 と送信されて
これを素直に左から右に順に1つ1つ処理していけば、
ちゃんと 2 1 の順で格納出来るものの。

この格納した値を、順番を意識せず、
なんやかんやと、ハッシュに入れなおしたり
foreach なんかしちゃうと、
勿論、それは保証出来ないのでして。

かくして、そういやぁ、Catalyst ではどうなの?と思い、
家に帰ってからテスト。


<html>
<body>
<form method="post" action="/">
<input type="checkbox" name="test" value="B" />
<input type="checkbox" name="test" value="2" />
<input type="checkbox" name="test" value="11" />
<input type="checkbox" name="test" value="a" />
<input type="checkbox" name="test" value="1" />
<input type="checkbox" name="test" value="b" />
<input type="checkbox" name="test" value="3" />
<input type="checkbox" name="test" value="A" />
<input type="submit" />
</form>
</body>
</html>

んで、これで submit ボタン押下すれば、
POSTされる値は当然、
test=B&test=2&test=11&test=a&test=1&test=b&test=3&test=A となりまして。

Controller で $c->req->param('test') の値を
グルグル順に見てみたところ、期待通りに
B 2 11 a 1 b 3 A の順で配列のリファレンスとして格納されていたのでした。
えがったえがった。

って、いや、家だと FastCGI 入れてないから、
職場の環境と、ちょっと動きが違ったら嫌だなぁ。
明日会社でも、一応実験してみるかー。

Posted by anigon at 11:49 PM

トラックバックURL:


http://anigon.net/cgi-bin/mt/mt-tb.cgi/567

「プラス中括弧。」へ戻る | 「swf。」へ進む

上へ戻る