一个$ _GET输入参数,它是一个Array

时间:2010-05-25 23:03:54

标签: php arrays get

我正在尝试将3个参数传递给脚本,其中第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]

然后我使用foreach来循环遍历第三个参数value3,即数组

//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()

我不确定我的方法是否正确。有些人可以澄清你是如何做某事的吗

6 个答案:

答案 0 :(得分:7)

尝试

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

答案 1 :(得分:7)

没有“将数组作为URL参数传递”(或表单值,因为这是相同的事情)。这些是字符串,除此之外发生的任何事情都是内置于应用程序服务器中的魔法,因此它是不可移植的。

PHP恰好支持&value3[]=the&value3[]=array&value3[]=values表示法为您自动创建$_GET['value3']数组,但这对PHP来说是特殊的,并不一定适用于其他地方。

您也可以直截了当地获取更清晰的网址,例如:value3=the,array,values,然后在PHP脚本中使用explode(',', $_GET['value3'])来创建数组。当然,这意味着您的分隔符char不能成为值的一部分。

要通过HTTP明确地传输结构化数据,请使用为此目的而制作的格式(即:JSON),然后在PHP端使用json_decode()

答案 2 :(得分:2)

对于数组,您需要将查询参数作为

传递
value3[]=abc&value3[]=pqr&value3[]=xyz

答案 3 :(得分: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' );

答案 4 :(得分: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方法中传递数组...

答案 5 :(得分:-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";}

基本上,

也会起作用。