2015-06-15 106 views
0

我遇到了一个HTML表单,其中一个字段是多选字段。当我提交表单作为POST一切正常,我可以看到并使用该数组。作为GET提交时,表单的多选部分仅显示string(5) "Array"。字面上的字Array。我正在使用内置在调试工具包中的CakePHP查看查询字符串。

这是URL

http://www.domain.com/?keywords=&location%5B%5D=12333&location%5B%5D=42123

的重要组成部分,这里被定位阵列。但是,当我看着服务器变量它变为:

Query String keywords=&location=Array 

这里location只是打印字Array。无论我尝试什么,我都无法将位置数组传递给PHP。有没有在php.ini允许这个设置?有没有其他方法可以正确地工作?为了保存搜索,我需要这个GET查询。

$_GETvar_dump(上述情况略有不同的查询):

array(10) { 
    ["agent"]=> string(0) "" 
    ["price_min"]=> string(1) "0" 
    ["price_max"]=> string(9) "987654321" 
    ["beds"]=> string(0) "" 
    ["baths"]=> string(0) "" 
    ["mls"]=> string(0) "" 
    ["pool"]=> string(1) "0" 
    ["spa"]=> string(1) "0" 
    ["keywords"]=> string(0) "" 
    ["location"]=> string(5) "Array" 
} 
+0

你能否解释一下吗? – Rymn

+0

URL编码的PHP数组的字符串表示形式如何?也许使用[serialize](http://php.net/manual/en/function.serialize.php)...但真的,听起来你应该看看发送POST。或者,如果数组不太复杂,则将它分解为像GET那样的键/对值。 – ficuscr

+0

你不应该使用'$ _GET'变量。这就是'$ this-> request-> data'和'$ this-> request-> query'的用途。尝试使用'debug($ this-> request-> query)' – Eagle

回答

5
location%5B%5D=12333&location%5B%5D=42123 
     ^^^^^^    ^^^^^^ 

您使用的表单字段location[]命名约定,它告诉PHP创建值在超全局变量的ARRAY 。这意味着你确实有这样的结构:

$_GET = array(
    'keywords' => '', 
    'location' => array(12333, 42123) 
); 

字符串情形数组是字面字Array

echo $_GET['location']; // outputs: Array 
echo $_GET['location'][0]; // outputs: 12333 
+0

我读了这个问题作为反向...认为是数组转换为字符串...“数组” – ficuscr

+0

echo $ _GET ['location'] [0]; //输出:A echo $ _GET ['location'] [1]; //输出:r echo $ _GET ['location'] [2]; //输出:r echo $ _GET ['location'] [3]; //输出:a echo $ _GET ['location'] [4]; //输出:y – Rymn

+1

Marc B你不要留下一个问题让我回答哈哈:) –