クエリ文字列を介して配列を渡す標準的な方法はありますか?
明確に言うと、複数の値を持つクエリ文字列があり、そのうちの 1 つは配列値になります。そのクエリ文字列の値を配列として扱いたいのですが、配列が分割されて他のクエリ文字列変数と区別がつかなくなるのは望ましくありません。
また、これによると回答を投稿する著者は、配列のクエリ文字列サポートは定義されていないと示唆しています。これは正しいでしょうか?
編集:
@Alex の回答に基づくと、これを行う標準的な方法はないので、次に私が尋ねるのは、読み取っているパラメーターがPHPとJavascript の両方で配列であることを認識する簡単な方法は何ですか?
複数のパラメータに同じ名前を付けることは許容されますか?そうすれば、それらが配列に属していることがわかりますか? 例:
?myarray=value1&myarray=value2&myarray=value3...
それとも、これは悪い習慣でしょうか?
ベストアンサー1
私が理解したことは次のとおりです:
複数値のフォーム フィールドの送信、つまり 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>
(注: この場合、選択コントロールに名前を付けることが重要です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"
角度:
"list_a": [
"1",
"2",
"3"
],
"list_b[]": [
"1",
"2",
"3"
],
"list_c": "1,2,3"
(角度議論)
node.js、Wordpress、ASP.netの例についてはコメントを参照してください。
順序の維持:考慮すべきもう 1 つの点は、項目の順序(つまり、配列を順序付きリストとして) を維持する必要がある場合、実際には 1 つのオプションしかなく、それは区切られた値のリストを渡し、それを明示的に配列に変換することです。