可能重复:
如何检查 $_GET 是否为空?
我正在尝试检查$_GET
我的 url 中有任何数据的情况?var=foo&biz=bang
,而if
我目前用来执行此操作的语句是isset($_GET) //Do something
,但即使我的 URL 中甚至没有任何数据?
或&
任何地方,它也会返回 truey。我假设$_GET
变量总是设置的,那么我该如何检查呢?
可能重复:
如何检查 $_GET 是否为空?
我正在尝试检查$_GET
我的 url 中有任何数据的情况?var=foo&biz=bang
,而if
我目前用来执行此操作的语句是isset($_GET) //Do something
,但即使我的 URL 中甚至没有任何数据?
或&
任何地方,它也会返回 truey。我假设$_GET
变量总是设置的,那么我该如何检查呢?
由于 $_GET总是在 php 中 设置(在网络服务器中运行时),你真正想知道的是“里面有什么吗?”
你想使用:
if ($_GET) {
}
这是有效的,因为 $_GET 是一个数组,一个空数组将被评估false
,而一个填充的数组是true
.
更新
我不再使用上述方法,因为它对可测试性和 CLI 运行命令 ( phpunit
, artisan
) 确实有负面影响。
我现在总是检查isset()
阵列$_GET
。我通常也分配给一个数组里面的if
- php 将这些表达式评估为分配变量的值。
如果您的框架具有“安全数组访问”功能,则应始终使用它。如果你的框架有一个“安全的 GET 函数”那就更好了。如果您没有使用框架,或者您的框架不包含这些辅助函数,您应该自己编写它们。
// example with "safe array access"
if (isset($_GET) && $value = safe_array($_GET, 'key')) {
// do something with $value
}
// example with "safe GET function"
if ($value = safe_input_get('key')) {
// do something with $value
}
if(!empty($_GET))
{
// do something
}
这应该让您知道 get 数组是否已填充
usingempty()
可能有问题,因为它将返回true
0、0.00、false 和其他 (http://php.net/manual/en/function.empty.php)
可能的解决方法:
<?php
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
if (!is_blank($_GET)){
... do your thing ...
}
?>
或检查特定的帖子值isset($_POST['value'])