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

Mir*_*rko 43 php arrays get

如何通过$ _GET将一个或多个类型数组的变量传递给另一个页面?

我总是在表单中传递变量值 ?a=1&b=2&c=3

传球a=[1,2,3]怎么样?

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

谢谢

Arn*_*anc 89

您可以使用[]语法通过_GET传递数组:

?a[]=1&a[]=2&a[]=3
Run Code Online (Sandbox Code Playgroud)

PHP理解这种语法,所以$_GET['a']将等于array(1, 2, 3).

您还可以指定键:

?a[42]=1&a[foo]=2&a[bar]=3
Run Code Online (Sandbox Code Playgroud)

多维数组也有效:

?a[42][b][c]=1&a[foo]=2
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

另一种方法是传递json编码的数组:

?a=[1,2,3]
Run Code Online (Sandbox Code Playgroud)

你可以解析ajson_decode:

$a = json_decode($_GET['a']); // array(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

并使用json_encode对其进行再次编码:

json_encode(array(1, 2, 3)); // "[1,2,3]"
Run Code Online (Sandbox Code Playgroud)

不要serialize()用于此目的.Serialize允许序列化对象,并且有方法使它们执行代码.所以你永远不应该反序列化不受信任的字符串.


Mic*_*ior 6

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

$query_str = http_build_query(array(
    'a' => array(1, 2, 3)
));
Run Code Online (Sandbox Code Playgroud)


IRS*_*HAD 5

$city_names = array(
    'delhi',
    'mumbai',
    'kolkata',
    'chennai'
);
$city_query = http_build_query(array('city' => $city_names));
Run Code Online (Sandbox Code Playgroud)

这会给你:

city[0]=delhi&city[1]=mumbai&city[2]=kolkata&city[3]=chennai
Run Code Online (Sandbox Code Playgroud)

如果您还想对括号进行编码,请使用以下代码:

$city_query = urlencode(http_build_query(array('city' => $city_names)));
Run Code Online (Sandbox Code Playgroud)

输出:

city%255B0%255D%3Ddelhi%26city%255B1%255D%3Dmumbai .....
Run Code Online (Sandbox Code Playgroud)

参考:http_build_queryurlencode