これが私が理解したことです:
複数値のフォームフィールドの送信、つまりGET / POST変数を介した配列の送信は、標準が必ずしもスペルアウトされていないため、いくつかの異なる方法で実行できます。
複数値のフィールドまたは配列を送信する3つの可能な方法は次のとおりです。
?cars[]=Saab&cars[]=Audi
(最良の方法-PHPはこれを配列に読み込みます)
?cars=Saab&cars=Audi
(悪い方法-PHPは最後の値のみを登録します)
?cars=Saab,Audi
(これを試したことはありません)
フォームの例
フォームでは、複数値のフィールドは、複数に設定された選択ボックスの形式をとることができます。
<form>
<select multiple="multiple" name="cars[]">
<option>Volvo</option>
<option>Saab</option>
<option>Mercedes</option>
</select>
</form>
(注:この場合、selectコントロールに名前を付けることが重要some_name[]
です。これにより、結果のリクエスト変数がPHPによって配列として登録されます)
...または同じ名前の複数の非表示フィールドとして:
<input type="hidden" name="cars[]" value="Volvo">
<input type="hidden" name="cars[]" value="Saab">
<input type="hidden" name="cars[]" value="Mercedes">
注:複数の値に使用field[]
することは、実際には十分に文書化されていません。クエリ文字列の複数値キーに関するセクション(Wikipedia)、または複数選択入力を扱うW3Cドキュメントには、この点についての言及はありません。
アップデート
コメント提供者が指摘しているように、これは非常にフレームワーク固有です。いくつかの例:
クエリ文字列:
?list_a=1&list_a=2&list_a=3&list_b[]=1&list_b[]=2&list_b[]=3&list_c=1,2,3
レール:
"list_a": "3",
"list_b":[
"1",
"2",
"3"
],
"list_c": "1,2,3"
Angular:
"list_a": [
"1",
"2",
"3"
],
"list_b[]": [
"1",
"2",
"3"
],
"list_c": "1,2,3"
(角度のある議論)
node.js、Wordpress、ASP.netの例についてはコメントを参照してください
順序の維持:もう1つ考慮すべき点は、アイテムの順序
を維持する必要がある場合(つまり、順序付きリストとしての配列)、実際には1つのオプションしかなく、区切り文字の値のリストを渡し、それを明示的に変換することです。自分で配列。