如何通过$ _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)
你可以解析a
用json_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允许序列化对象,并且有方法使它们执行代码.所以你永远不应该反序列化不受信任的字符串.
您可以将关联数组传递http_build_query()
给URL,并将结果字符串作为查询字符串附加到URL.该数组将由PHP自动解析,因此$_GET
在接收页面上将包含一个数组.
例
$query_str = http_build_query(array(
'a' => array(1, 2, 3)
));
Run Code Online (Sandbox Code Playgroud)
$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)