$ _GET的奇怪问题

时间:2010-10-12 12:55:48

标签: php

$ _GET值有一个奇怪的错误。我使用thsi代码进行查询: array($_GET['cats'])

如果我手动插入get参数,例如:array(3,328)一切正常。但如果我使用: array($_GET['cats'])并通过URl提交猫?cats=3,328它不起作用,可能是什么问题?

6 个答案:

答案 0 :(得分:5)

你无法插入这样的值。如果array($_GET['cats'])的值为array('3,328'),则$_GET['cats']相当于3,328。所以基本上,值是一个字符串,而不是整数列表。你想要的是:

explode(',', $_GET['cats'])

答案 1 :(得分:4)

array($_GET['cats'])将创建一个包含单个元素的数组,该元素的值是$_GET['cats']的值,无论它是什么值。如果字符串值3,328array('3,328')相同。

如果您想将字符串值3,328转换为与array(3,328)相同的数组,请使用explode,处的字符串拆分为字符串{{3}使用array_map将每个字符串转换为整数:

$arr = array_map('intval', explode(',', $_GET['cats']));

现在这个结果数组与array(3,328)完全相同:

var_dump($arr === array(3,328));  // bool(true)

答案 2 :(得分:1)

解决方案1:将HTTP GET参数作为数组发送到您的URL中

URL:参数?cats [] = 3&cats [] = 328

var_dump($_GET["cats"])将导致:

array(2) {
  [0]=>
  string(1) "3"
  [1]=>
  string(3) "328"
}

解决方案2:将数字作为一个字符串发送到URL中,然后用PHP处理

URL参数:?cats = 3,328

...,然后使用一些PHP代码对其进行处理:

$cats = array_map("intval", explode(",", $_GET["cats"]));

var_dump($_GET["cats"])将导致:

array(2) {
  [0]=>
  string(1) "3"
  [1]=>
  string(3) "328"
}

答案 3 :(得分:0)

$_GET['cats']是一个简单的字符串。如果您想将3和328作为单独的值,则需要使用explode。您可以使用foreach打印爆炸值。

答案 4 :(得分:0)

您需要拆分GET参数

$values = explode(',', $_GET['cats'])

答案 5 :(得分:0)

正如其他人所说,$ _GET ['cats']是一个字符串,因为你正在做的事情。

但是,如果您将URI查询字符串更改为?cats[]=3,328,那么$_GET['cats']将为您准备array(3,328)