在PHP中,0被视为空?

代码将解释更多:

$var = 0; if (!empty($var)){ echo "Its not empty"; } else { echo "Its empty"; } 

结果返回“其空”。 我以为empty()会检查我是否已经设置了variables并在里面有值。 为什么它返回“它的空”?

http://php.net/empty

以下几点被认为是空的:

  • “”(一个空string)
  • 0(0作为整数)
  • “0”(0作为一个string)
  • 空值
  • 数组()(一个空的数组)
  • var $ var; (一个variables声明,但没有一个类的值)

请注意,这与用于强制为布尔值false列表完全相同。 empty就是!isset($var) || !$var !isset($var) || !$var 。 尝试isset代替。

我想知道为什么没有人提出非常方便的types比较表 。 它回答了有关常见function和比较运算符的所有问题。

片段:

 Expression | empty() ----------------+-------- $x = ""; | true $x = null | true var $x; | true $x is undefined | true $x = array(); | true $x = false; | true $x = true; | false $x = 1; | false $x = 42; | false $x = 0; | true $x = -1; | false $x = "1"; | false $x = "0"; | true $x = "-1"; | false $x = "php"; | false $x = "true"; | false $x = "false"; | false 

在其他作弊表格上,如果我不确定的话,我总是把这张桌子的硬拷贝放在我的桌子上

在数值的情况下,你应该使用is_numeric函数:

 $var = 0; if (is_numeric($var)) { echo "Its not empty"; } else { echo "Its empty"; } 

我最近也被这件裤子夹在裤子上。 我们经常处理的问题是未设置的variables – 比如可能有或没有的表单元素,但是对于许多元素, 0 (或者更准确地通过post的string'0' ,但仍然会被评估作为“假”)是一个合法的价值,说一个下拉列表。

先使用empty() ,然后strlen()是最好的,如果你也需要这个,

 if(!empty($var) && strlen($var)){ echo '"$var" is present and has a non-falsey value!'; } 

使用strlen()代替。 我遇到了同样的问题,使用1/0作为一些variables的可能值。 我正在使用if (strlen($_POST['myValue']) == 0)来testing是否有一个字符或不是我的variables。

从语言的angular度来看, 空有 没有价值的意义。 像其他人说的,你将不得不使用isset()来检查一个variables是否被定义,这是你做的。

对于所有计算结果为FALSE函数, empty()返回true,实际上它是一个“not”( ! )的伪装。 我认为你的意思是isset()

从手动:如果var具有非空值和非零值,则返回FALSE。

以下几点被认为是空的:

  • “”(一个空string)
  • 0(0作为整数)
  • “0”(0作为string)NULL
  • FALSE array()(一个空数组)var
  • 是$ var; (一个variables声明,但没有一个类的值)

更多: http : //php.net/manual/en/function.empty.php

 if (empty($var) && $pieces[$var] != '0') { //do something } 

在我的情况下,这个代码工作。

以下几点被认为是空的:

  • “”(一个空string)
  • 0(0作为整数)
  • “0”(0作为一个string)
  • 空值
  • 数组()(一个空的数组)
  • var $ var; (一个variables声明,但没有一个类的值)

从PHP手册

在你的情况下, $var0 ,所以empty($var)将返回true ,你在testing之前会否定结果,所以else块会运行“ Its empty ”作为输出。

实际上isset只是检查variables是否设置。在这种情况下,如果你想检查你的variables是否为零或空,你可以使用这个例子:

 $myVar = ''; if (empty($myVar)) { echo "Its empty"; } echo "<br/>"; if ($myVar===0) { echo "also zero!"; } 

只是为了通知$ myVar == 0就像空的函数一样。

接受0作为variables使用isset的值

检查variables是否为空

 $var = 0; if ($var == '') { echo "empty"; } else { echo "not empty"; } //output is empty 

检查是否设置了variables

 $var = 0; if (isset($var)) { echo "not empty"; } else { echo "empty"; } //output is not empty 

它为我工作!

 // if(isset($_POST['post_var'])&&$_POST['post_var']!==''){ echo $_POST['post_var']; } //results: 1 if $_POST['post_var']='1' 0 if $_POST['post_var']='0' skip if $_POST['post_var']='' 

空应该是空的..无论什么欺骗说。

当我这样做

 $var = ''; $var = '0'; 

我期望var_dump(empty($var)); 将返回false。

如果你正在检查一个数组中的东西,你必须首先执行isset($var)