2009-12-02 106 views
35

是否可以將$_GET中的值作爲數組使用?

如果我試圖發送一個鏈接http://link/foo.php?id=1&id=2&id=3,並且我想在php上使用$_GET['id'],那麼這個值怎麼可能是一個數組?因爲現在echo $_GET['id']正在返回3。它是標題鏈接中的最後一個ID。有什麼建議麼?

回答

86

的常用方法在PHP做,這是把id[]在您的網址,而不是僅僅id

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

然後$_GET['id']將這些值的數組。這不是特別漂亮,但是它可以直接使用。

+0

這通常是我這樣做的方式,但是您可以在不更改表單的情況下處理請求(請參閱下面使用QueryString的我的回覆) – ChronoFish 2009-12-02 15:02:47

+0

這也適用於發佈嗎? – 2014-01-09 00:12:51

+0

@DantheMan是的,它也適用於POST請求。如果你在發佈表單,你需要像這樣的輸入:' ...'(參見下面Lucas的例子)。 – 2014-01-14 16:27:12

2

我想我知道你的意思,如果你要發送通過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']); 
21

您可以使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

但明確將更加詳細。

18

您可以指定你的HTML數組是這樣的:

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

這將導致該$ _GET數組在PHP中:

array(
    'id' => array(
    0 => 1, 
    1 => 2, 
    2 => 3 
) 
) 

當然,你可以使用任何類型的HTML輸入,在這裏。重要的是,所有在'id'數組中的值都需要輸入的名稱爲id[]

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); 
+1

+1,這肯定是需要更多的錯誤檢查等。你應該使用'$ _SERVER ['QUERY_STRING']'那裏,'urldecode()'參數,以防萬一有趣的人物......但是我討厭PHP的'[]',所以實際上我曾經寫過這樣的函數。 – mercator 2009-12-02 15:06:45

+0

好點,謝謝 – ChristopheD 2009-12-02 15:18:00

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

把所有的IDS到一個變量名爲$ id和他們用 「」 分開:

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

通過他們,像這樣:

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

處理它們:

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

你能解釋一下你的答案嗎? – Rico 2014-04-14 03:06:48