代码将解释更多:
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
结果返回“空”。我以为empty()会检查我是否已设置变量并且内部有值。为什么它会返回“它的空”??
答案 0 :(得分:156)
以下内容被认为是空的:
- “”(空字符串)
- 0(0为整数)
- “0”(0作为字符串)
- NULL
- FALSE
- array()(空数组)
- var $ var; (声明的变量,但在类中没有值)
请注意,这与强制转换为布尔false
的列表完全相同。 empty
只是!isset($var) || !$var
。请改为isset
。
答案 1 :(得分:68)
我想知道为什么没有人提出非常方便的Type comparison table。它回答了关于常用函数的每个问题并比较运算符。
摘录:
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
在其他备忘单上,我总是在桌子上保留一张硬拷贝,以防我不确定
答案 2 :(得分:31)
如果是数值,则应使用is_numeric函数:
$var = 0;
if (is_numeric($var))
{
echo "Its not empty";
}
else
{
echo "Its empty";
}
答案 3 :(得分:9)
请改用 strlen()
。
我使用1/0作为一些变量的可能值来讨论相同的问题。
我正在使用if (strlen($_POST['myValue']) == 0)
来测试我的变量中是否有某个字符。
答案 4 :(得分:8)
我最近也抓住了这条裤子。我们经常处理的问题是未设置的变量 - 比如可能存在或不存在的表单元素,但对于许多元素,0
(或字符串'0'
将更准确地通过帖子,但仍然被评估为“falsey”)在下拉列表中是合法的值。
首先使用empty()
,然后使用strlen()
是您最好的,如果您也需要这样做,例如:
if(!empty($var) && strlen($var)){
echo '"$var" is present and has a non-falsey value!';
}
答案 5 :(得分:6)
从语言学的角度来看, empty 具有无值的含义。像其他人一样,你必须使用isset()
来检查是否已定义变量,这就是你所做的。
答案 6 :(得分:4)
这对我有用!
//
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']=''
答案 7 :(得分:3)
答案 8 :(得分:3)
在变量使用isset
检查变量是否为空
$var = 0;
if ($var == '') {
echo "empty";
} else {
echo "not empty";
}
//output is empty
检查变量是否已设置
$var = 0;
if (isset($var)) {
echo "not empty";
} else {
echo "empty";
}
//output is not empty
答案 9 :(得分:1)
以下内容被认为是空的:
在您的情况下,$var
为0
,因此empty($var)
将返回true
,您在测试前会否定结果,因此else块将运行给出“{ {1}}“作为输出。
答案 10 :(得分:1)
if (empty($var) && $pieces[$var] != '0') {
//do something
}
在我的情况下,此代码有效。
答案 11 :(得分:1)
来自手册: 如果var具有非空和非零值,则返回FALSE。
以下内容被认为是空的:
答案 12 :(得分:0)
实际上只是检查变量是否设置。在这种情况下,如果你想检查你的变量是真的为零还是空,你可以使用这个例子:
$myVar = '';
if (empty($myVar))
{
echo "Its empty";
}
echo "<br/>";
if ($myVar===0)
{
echo "also zero!";
}
只是因为通知$ myVar == 0就像空函数一样。
答案 13 :(得分:0)
空应该是空的..无论什么deceze说。
当我这样做时
$var = '';
$var = '0';
我希望var_dump(empty($var));
将返回false。
如果要检查数组中的内容,则必须先isset($var)
。
答案 14 :(得分:0)
仅使用($_POST['input_field_name'])!=0
代替!($_POST['input_field_name'])==0
,则0不会被视为空。
答案 15 :(得分:0)
不确定是否仍然有人在寻求解释和解决方案。上面的评论全部说明了TRUE / FALSE / 1/0之间的区别。
我只想拿2美分作为显示实际价值的方式。
如果使用的是布尔数据类型,则需要查找TRUE与FALSE的结果;如果将其存储在MySQL中,它将被存储为1个resp。 0(如果我没记错的话,这在您的服务器内存中也是一样)。
因此要在PHP中显示该值,您需要检查它是true(1)还是false(0),并显示所需的值:“ TRUE”或“ FALSE”或可能是“ 1”或“ 0” 。
注意,在PHP中大于(或不同)大于0的所有内容也将被视为TRUE。例如:2,“ abc”等都将返回TRUE。
如果您使用数字数据类型,则其存储方式是相同的。
要显示该值,您需要告诉PHP将其作为数字来处理。我发现最简单的方法是将其乘以1。
答案 16 :(得分:0)
正确的例子。只需在数据库中创建int类型字段(例如移动电话号码),然后通过表单为以下数据库提交空白值,或仅使用SQL插入即可。它将保存在数据库0中的内容,因为它是int类型,不能保存为空白或null。因此,它为空,但将另存为0。因此,当您通过PHP提取数据并检查空值时。这是非常有用且在逻辑上正确的。
0.00,0.000,0.0000 .... 0.0 ... 0也为空,上面的示例也可以用于在数据库中存储不同类型的值,例如float,double,decimal(十进制具有不同的变体,例如0.000和等等。
答案 17 :(得分:0)
您需要使用isset()来检查是否设置了值。