我正在尝试将3个参数传递给脚本,其中第3个参数$_GET['value3']
应该是数组
$_GET['value1']
$_GET['value2']
$_GET['value3'] //an array of items
我正在调用这样的脚本:(请注意value3
的语法,我不确定它是否正确)
http://localhost/test.php?value1=test1&value2=test2&value3=[the, array, values]
然后我使用foreach来循环遍历第三个参数value3
,即数组
//process the first input $_GET['value1']
//process the second input $_GET['value2']
//process the third input $_GET['value3'] which is the array
foreach($_GET['value3'] as $arrayitem){
echo $arrayitem;
}
但我收到错误Invalid argument supplied for foreach()
我不确定我的方法是否正确。有些人可以澄清你是如何做某事的吗
答案 0 :(得分:7)
尝试
http://localhost/test.php?value1=test1&value2=test2&value3[]=the&value3[]=array&value3[]=values
答案 1 :(得分:7)
没有“将数组作为URL参数传递”(或表单值,因为这是相同的事情)。这些是字符串,除此之外发生的任何事情都是内置于应用程序服务器中的魔法,因此它是不可移植的。
PHP恰好支持&value3[]=the&value3[]=array&value3[]=values
表示法为您自动创建$_GET['value3']
数组,但这对PHP来说是特殊的,并不一定适用于其他地方。
您也可以直截了当地获取更清晰的网址,例如:value3=the,array,values
,然后在PHP脚本中使用explode(',', $_GET['value3'])
来创建数组。当然,这意味着您的分隔符char不能成为值的一部分。
要通过HTTP明确地传输结构化数据,请使用为此目的而制作的格式(即:JSON),然后在PHP端使用json_decode()
。
答案 2 :(得分:2)
对于数组,您需要将查询参数作为
传递value3[]=abc&value3[]=pqr&value3[]=xyz
答案 3 :(得分:1)
您也可以在字符串中强制转换索引的名称
?value1[a]=test1a&value1[b]=test1b&value2[c][]=test3a&value2[c][]=test3b
将是
$_GET['value1']['a'] = test1a
$_GET['value1']['b'] = test1b
$_GET['value2']['c'] = array( 'test3a', 'test3b' );
答案 4 :(得分:0)
http://php.net/manual/en/reserved.variables.get.php 看看上面的链接.. 您将看到如何实现GET方法。 会发生什么是URL,它是使用'&'分隔的。然后将它们添加为键值对。
public function fixGet($args) {
if(count($_GET) > 0) {
if(!empty($args)) {
$lastkey = "";
$pairs = explode("&",$args);
foreach($pairs as $pair) {
if(strpos($pair,":") !== false) {
list($key,$value) = explode(":",$pair);
unset($_GET[$key]);
$lastkey = "&$key$value";
} elseif(strpos($pair,"=") === false)
unset($_GET[$pair]);
else {
list($key, $value) = explode("=",$pair);
$_GET[$key] = $value;
}
}
}
return "?".((count($_GET) > 0)?http_build_query($_GET).$lastkey:"");
}
因为,它们被添加为键值对,你无法在GET方法中传递数组...
答案 5 :(得分:-1)
以下内容也适用:
http://localhost/test.php?value3[]=the&value3[]=array&value3[]=values
更高级的方法是序列化PHP数组并将其打印在链接中:
http://localhost/test.php?value3=a:3:{i:0;s:3:"the";i:1;s:5:"array";i:2;s:6:"values";}
也会起作用。