web-dev-qa-db-ja.com

PHPで$ _GET経由で配列を渡す方法は?

$ _GETを介して配列型の1つ以上の変数を別のページに渡すにはどうすればよいですか?

私は常に?a=1&b=2&c=3の形式で変数値を渡しました

a=[1,2,3]を渡すことはどうですか?

Forループを作成し、すべての値を追加する必要がありますか?

ありがとう

42
Mirko

_[]_構文を使用して、_GETを介して配列を渡すことができます。

_?a[]=1&a[]=2&a[]=3
_

PHPはこの構文を理解するため、_$_GET['a']_はarray(1, 2, 3)と等しくなります。

キーを指定することもできます:

_?a[42]=1&a[foo]=2&a[bar]=3
_

多次元配列も機能します。

_?a[42][b][c]=1&a[foo]=2
_

http_build_query() はこれを自動的に行います:

_http_build_query(array('a' => array(1, 2, 3))) // "a[]=1&a[]=2&a[]=3"

http_build_query(array(
    'a' => array(
        'foo' => 'bar',
        'bar' => array(1, 2, 3),
     )
)); // "a[foo]=bar&a[bar][]=1&a[bar][]=2&a[bar][]=3"
_

別の方法は、jsonエンコードされた配列を渡すことです。

_?a=[1,2,3]
_

そして、aを_json_decode_で解析できます:

_$a = json_decode($_GET['a']); // array(1, 2, 3)
_

そして、json_encodeで再度エンコードします。

_json_encode(array(1, 2, 3)); // "[1,2,3]"
_

この目的でserialize()を使用しないでください。 Serializeを使用すると、オブジェクトをシリアル化できます。また、オブジェクトにコードを実行させる方法があります。したがって、信頼できない文字列をデシリアライズしないでください。

87
Arnaud Le Blanc

連想配列を http_build_query() に渡し、結果の文字列をクエリ文字列としてURLに追加できます。配列はPHP so $_GET受信ページの配列には配列が含まれます。

$query_str = http_build_query(array(
    'a' => array(1, 2, 3)
));
6
Michael Mior
$city_names = array(
    'delhi',
    'mumbai',
    'kolkata',
    'chennai'
);
$city_query = http_build_query(array('city' => $city_names));

これはあなたに与えます:

city[0]=delhi&city[1]=mumbai&city[2]=kolkata&city[3]=chennai

括弧もエンコードする場合は、次のコードを使用します。

$city_query = urlencode(http_build_query(array('city' => $city_names)));

出力:

city%255B0%255D%3Ddelhi%26city%255B1%255D%3Dmumbai .....

リファレンス: http_build_queryrlencode

4
IRSHAD