2010-05-25 40 views
2

我想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] 

我再通過第三個參數value3這是陣列

使用foreach來希望循環0
//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()

我不知道如果我的方法是正確的。可以將部分弄清楚你會如何去這樣做之類的事情

回答

7

數組有沒有這樣的事情「傳遞一個數組作爲一個URL參數「(或者一個表單值,因爲這是同一件事)。這些是字符串,除此之外發生的任何事情都是已經內置到應用程序服務器中的魔法,因此它是不可移植的。

PHP恰好支持&value3[]=the&value3[]=array&value3[]=values表示法,以自動創建$_GET['value3']作爲您的數組,但這對於PHP來說是特殊的,並不一定適用於其他地方。

你也可以直截了當地找一個更乾淨的URL,例如:value3=the,array,values,然後在你的PHP腳本中使用explode(',', $_GET['value3'])來創建一個數組。當然這意味着你的分隔字符不能成爲價值的一部分。

要通過HTTP無歧義地傳輸結構化數據,請使用爲此目的而制定的格式(即:JSON),然後在PHP端使用json_decode()

+1

+1,用於詳細解釋,以及應用服務器的具體信息。 – 2010-05-25 23:16:17

+0

是什麼讓'value3 =數組,值更清潔?它的眼睛可能更乾淨,但它的代碼肯定不夠乾淨。 – webbiedave 2010-05-25 23:19:11

+2

我認爲在使用該語言進行開發時依賴語言功能並不是太糟糕,大聲笑.. – 2010-05-25 23:21:35

7

嘗試

http://localhost/test.php?value1=test1&value2=test2&value3[]=the&value3[]=array&value3[]=values 
2

對於需要傳遞的查詢參數

value3[]=abc&value3[]=pqr&value3[]=xyz 
+1

你或許應該刪除這些單引號。 – webbiedave 2010-05-25 23:13:26

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'); 
+0

這是真正的新東西:-) – 2010-05-25 23:23:43

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

會,基本上也可以。

+1

第一種形式在PHP中不起作用。如果同一個鍵出現多次,PHP將使用分配的最後一個值。只有在鍵中存在'[]'字符時纔會執行數組附加操作。 – 2010-05-25 23:33:49

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方法...