如何获得PHP $ _GET数组?


How to get PHP $_GET array?

$_GET中是否可以有一个值作为数组?

如果我尝试发送带有http://link/foo.php?id=1&id=2&id=3的链接,并且我想在php端使用$_GET['id'],那么该值如何成为数组? 因为现在echo $_GET['id']返回3。 它是标题链接中的最后一个ID。 有什么建议么?


在PHP中执行此操作的通常方法是将id[]放在您的URL中,而不仅仅是id

1
http://link/foo.php?id[]=1&id[]=2&id[]=3

然后$_GET['id']将是这些值的数组。它不是特别漂亮,但是可以直接使用。


您可以将id设置为一系列逗号分隔的值,如下所示:

index.php?id=1,2,3&name=john

然后,在您的PHP代码中,将其爆炸成一个数组:

1
2
$values = explode(",", $_GET["id"]);
print count($values) ." values passed.";

这将保持简洁。另一种(更常见于$ _POST)方法是使用数组样式的方括号:

index.php?id[]=1&id[]=2&id[]=3&name=john

但这显然会更加冗长。


您可以通过以下方式在HTML中指定一个数组:

1
2
3
<input type="hidden" name="id[]" value="1"/>
<input type="hidden" name="id[]" value="2"/>
<input type="hidden" name="id[]" value="3"/>

这将导致PHP中的$ _GET数组:

1
2
3
4
5
6
7
array(
  'id' => array(
    0 => 1,
    1 => 2,
    2 => 3
  )
)

当然,您可以在此处使用任何类型的HTML输入。重要的是,所有需要在" id"数组中使用其值的输入均具有名称id[]


您可以使用查询字符串获取它们:

1
$idArray = explode('&',$_SERVER["QUERY_STRING"]);

这将为您提供:

1
2
3
$idArray[0] ="id=1";
$idArray[1] ="id=2";
$idArray[2] ="id=3";

然后

1
2
3
4
5
foreach ($idArray as $index => $avPair)
{
  list($ignore, $value) = explode("=", $avPair);
  $id[$index] = $value;
}

这会给你

1
2
3
$id[0] ="1";
$id[1] ="2";
$id[2] ="3";

当您不想更改链接(例如foo.php?id=1&id=2&id=3)时,您可以执行以下操作(尽管可能有更好的方法...):

1
2
3
4
5
6
7
8
$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);


请参见如何在HTML

中创建数组?在PHP和HTML常见问题解答中。


将所有id放入一个名为$ ids的变量中,并用","将其分开:

1
$ids ="1,2,3,4,5,6";

像这样传递它们:

1
$url ="?ids={$ids}";

处理它们:

1
$ids = explode(",", $_GET['ids']);

我想我知道您的意思,如果您想通过URL发送数组,则可以使用序列化

例如:

1
2
3
$foo = array(1,2,3);
$serialized_array = serialize($foo);
$url ="http://www.foo.com/page.php?vars=".$foo;

和在page.php

1
$vars = unserialize($_GET['vars']);

是的,这是一个代码示例,在注释中带有一些解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?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];
        }
      }
    }
  }
?>