如何通过$ _GET?
将一个或多个类型数组的变量传递给另一个页面我总是以?a=1&b=2&c=3
如何传递a=[1,2,3]
?
我是否需要编写for循环并附加所有值?
由于
答案 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 .....
答案 3 :(得分:-1)
只需重复这样的$_GET
个变量:name=john&name=lea
这会为您提供array
。
我曾经相信它会被覆盖!