在PHP中,0被视为空?
代码将解释更多:
$var = 0; if (!empty($var)){ echo "Its not empty"; } else { echo "Its empty"; }
结果返回“其空”。 我以为empty()会检查我是否已经设置了variables并在里面有值。 为什么它返回“它的空”?
以下几点被认为是空的:
- “”(一个空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手册
在你的情况下, $var
是0
,所以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)
。