1

如果参数存在,我知道如何从查询字符串中获取值:

$hop = $_GET['hop'];

但如果它不在查询字符串中,我还需要设置一个默认值。我试过这个,但没有奏效:

$hop = $_GET['hop'];

if ($hop = " ") {
  $hop = 'hardvalue';
};

请帮我处理查询字符串有和没有“hop”参数的情况,如果它存在但未定义:

example.com/?hop=xyz

&

example.com/

&

example.com/?hop=

PS我不知道我在做什么,所以如果你向我解释,还请包括我添加到我的PHP页面的确切代码。

4

4 回答 4

2

利用array_key_exists

if (array_key_exists('hop', $_GET))
{
 // the key hop was passed on the query string.
 // NOTE it still can be empty if it was passed as ?hop=&nextParam=1

} 
else
{
 //the key hop was not passed on the query string.
}
于 2011-04-01T19:42:57.647 回答
2

多想了一下,决定它应该更健壮一点:

$hop = 'hardvalue';
if (array_key_exists('hop', $_GET)) {
    if (!empty($_GET['hop'])) { $hop = $_GET['hop']; }
}
于 2011-04-01T19:43:07.520 回答
1

你已经得到了繁琐的解决方案。使用 URL 或表单参数时,您通常也希望将空字符串或零视为缺失值。然后你可以使用这个替代语法:

$hop = $_GET["hop"]   or   $hop = "hardvalue";

=它之所以有效,是因为over的优先级更高or,并且使用额外的空格更容易阅读。

从 PHP 5.3 开始,也可以使用:

$hop = $_GET["hop"]  ?:  "hardvalue";

这里的优点是这种语法不会破坏 php 通知,这对于调试很有用。

于 2011-04-01T20:26:31.780 回答
1

其实我会用

$hop = !empty($_GET['hop']) ? $_GET['hop'] : 'default';

使用empty()而不是isset()处理您的第三种情况,其中参数存在但未定义。

此外, inif ($hop = " ")=需要更改为==. =分配,==测试相等性。按照您的方式,if 语句将始终运行,无论$hop等于什么。

于 2011-04-01T19:56:45.890 回答