如何获得PHP $ _GET数组?

是否有可能在$_GET的值作为数组?

如果我试图发送一个链接http://link/foo.php?id=1&id=2&id=3 ,并且我想在php端使用$_GET['id'] ,那么这个值怎么可能是一个arrays? 因为现在echo $_GET['id']正在返回3 。 它是在标题链接中的最后一个ID。 有什么build议么?

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

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

然后$_GET['id']将是这些值的数组。 这不是特别漂亮,但它可以在盒子外面工作。

你可以用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

但是,这显然会更加冗长。

你可以用这种方法在你的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 ) ) 

当然,您可以在这里使用任何types的HTMLinput。 重要的是所有你想在'id'数组中input值的input都有名字id[]

您可以使用查询string获取它们:

 $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"; 

当你不想改变链接(例如foo.php?id=1&id=2&id=3 )时,你可能会这样做(尽pipe可能有更好的方法…):

 $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 <form>创build数组?PHP和HTML常见问题 。

把所有的id放到一个名为$ id的variables中,并用“,”分开:

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

像这样传递他们:

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

处理它们:

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

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

例如:

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

和page.php

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

是的,这里有一个代码示例,在评论中有一些解释:

 <?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]; } } } } ?> 
 $url = 'http://link/foo.php?id=1-2-3'; $id = explode('-', $url); echo $id[0]; echo $id[1]; echo $id[2];