如何在php中通过$_GET传递数组?

2022-08-30 11:39:04

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

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

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

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

谢谢


答案 1

您可以使用以下语法通过_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]

你可以用:ajson_decode

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

并用json_encode再次编码:

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

不要将序列化()用于此目的。序列化允许序列化对象,并且有办法使它们执行代码。因此,切勿反序列化不受信任的字符串。


答案 2

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

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