是否可以将$_GET
中的值作为数组?
如果我尝试发送http://link/foo.php?id=1&id=2&id=3
的链接,并且我想在php端使用$_GET['id']
,那么该值怎么可能是一个数组呢?因为现在echo $_GET['id']
正在返回3
。它是标题链接中的最后一个id。有什么建议吗?
答案 0 :(得分:92)
在PHP中执行此操作的常用方法是将id[]
放入您的网址而不只是id
:
http://link/foo.php?id[]=1&id[]=2&id[]=3
然后$_GET['id']
将是这些值的数组。它不是特别漂亮,但它开箱即用。
答案 1 :(得分:24)
您可以使id
成为一系列逗号分隔的值,如下所示:
index.php?id=1,2,3&name=john
然后,在PHP代码中,将其分解为数组:
$values = explode(",", $_GET["id"]);
print count($values) . " values passed.";
这将保持简洁。另一个(更常用于$ _POST)方法是使用数组样式的方括号:
index.php?id[]=1&id[]=2&id[]=3&name=john
但显然会更加冗长。
答案 2 :(得分:18)
您可以这样在HTML中指定数组:
<input type="hidden" name="id[]" value="1"/>
<input type="hidden" name="id[]" value="2"/>
<input type="hidden" name="id[]" value="3"/>
这将在PHP中产生这个$ _GET数组:
array(
'id' => array(
0 => 1,
1 => 2,
2 => 3
)
)
当然,您可以在此处使用任何类型的HTML输入。重要的是,'id'数组中所需值的所有输入都具有名称id[]
。
答案 3 :(得分:15)
您可以使用查询字符串获取它们:
$idArray = explode('&',$_SERVER["QUERY_STRING"]);
这会给你:
$idArray[0] = "id=1";
$idArray[1] = "id=2";
$idArray[2] = "id=3";
然后
foreach ($idArray as $index => $avPair)
{
list($ignore, $value) = explode("=", $avPair);
$id[$index] = $value;
}
这会给你
$id[0] = "1";
$id[1] = "2";
$id[2] = "3";
答案 4 :(得分:6)
如果您不想更改链接(例如foo.php?id=1&id=2&id=3
),您可能会做这样的事情(尽管可能有更好的方法......):
$id_arr = array();
foreach (explode("&", $_SERVER['QUERY_STRING']) as $tmp_arr_param) {
$split_param = explode("=", $tmp_arr_param);
if ($split_param[0] == "id") {
$id_arr[] = urldecode($split_param[1]);
}
}
print_r($id_arr);
答案 5 :(得分:4)
答案 6 :(得分:3)
我想我知道你的意思,如果你想通过一个URL发送数组,你可以使用serialize
例如:
$foo = array(1,2,3);
$serialized_array = serialize($foo);
$url = "http://www.foo.com/page.php?vars=".$foo;
和page.php
$vars = unserialize($_GET['vars']);
答案 7 :(得分:3)
将所有id放入一个名为$ ids的变量中,并用“,”分隔它们:
$ids = "1,2,3,4,5,6";
像这样传递:
$url = "?ids={$ids}";
处理它们:
$ids = explode(",", $_GET['ids']);
答案 8 :(得分:0)
是的,这是一个代码示例,在评论中有一些解释:
<?php
// Fill up array with names
$sql=mysql_query("SELECT * FROM fb_registration");
while($res=mysql_fetch_array($sql))
{
$a[]=$res['username'];
//$a[]=$res['password'];
}
//get the q parameter from URL
$q=$_GET["q"];
//lookup all hints from array if length of q>0
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
{
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
{
if ($hint=="")
{
$hint=$a[$i];
}
else
{
$hint=$hint." , ".$a[$i];
}
}
}
}
?>