如何通过PHP中的$ _GET传递数组?

时间:2011-08-26 15:21:27

标签: php arrays get

如何通过$ _GET?

将一个或多个类型数组的变量传递给另一个页面

我总是以?a=1&b=2&c=3

的形式传递变量值

如何传递a=[1,2,3]

我是否需要编写for循环并附加所有值?

由于

4 个答案:

答案 0 :(得分:86)

您可以使用[]语法通过_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允许序列化对象,并且有方法使它们执行代码。所以你永远不应该反序列化不受信任的字符串。

答案 1 :(得分:6)

您可以将关联数组传递给http_build_query(),并将结果字符串作为查询字符串附加到URL。该数组将由PHP自动解析,因此接收页面上的$_GET将包含一个数组。

示例

$query_str = http_build_query(array(
    'a' => array(1, 2, 3)
));

答案 2 :(得分:4)

$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_queryurlencode

答案 3 :(得分:-1)

只需重复这样的$_GET个变量:name=john&name=lea

这会为您提供array

我曾经相信它会被覆盖!