在PHP中,0被视为空?

时间:2010-02-08 09:16:10

标签: php function

代码将解释更多:

$var = 0;

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

结果返回“空”。我以为empty()会检查我是否已设置变量并且内部有值。为什么它会返回“它的空”??

18 个答案:

答案 0 :(得分:156)

http://php.net/empty

  

以下内容被认为是空的:

     
      
  • “”(空字符串)
  •   
  • 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)

empty()对于评估为FALSE的所有内容都返回true,实际上它是伪装的'not'(!)。我认为你的意思是isset()

答案 8 :(得分:3)

在变量使用isset

中接受0作为值

检查变量是否为空

$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)

以下内容被认为是空的:

  • “”(空字符串)
  • 0(0为整数)
  • “0”(0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • var $ var; (声明的变量,但是 在课堂上没有价值)

来自PHP Manual

在您的情况下,$var0,因此empty($var)将返回true,您在测试前会否定结果,因此else块将运行给出“{ {1}}“作为输出。

答案 10 :(得分:1)

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

在我的情况下,此代码有效。

答案 11 :(得分:1)

来自手册: 如果var具有非空和非零值,则返回FALSE。

以下内容被认为是空的:

  • “”(空字符串)
  • 0(0为整数)
  • “0”(0作为字符串)NULL
  • FALSE array()(空数组)var
  • $变种; (声明的变量,但是 在课堂上没有价值)

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

答案 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美分作为显示实际价值的方式。

BOOLEAN

如果使用的是布尔数据类型,则需要查找TRUE与FALSE的结果;如果将其存储在MySQL中,它将被存储为1个resp。 0(如果我没记错的话,这在您的服务器内存中也是一样)。

因此要在PHP中显示该值,您需要检查它是true(1)还是false(0),并显示所需的值:“ TRUE”或“ FALSE”或可能是“ 1”或“ 0” 。
注意,在PHP中大于(或不同)大于0的所有内容也将被视为TRUE。例如:2,“ abc”等都将返回TRUE。

BIT,TINYINT

如果您使用数字数据类型,则其存储方式是相同的。
要显示该值,您需要告诉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()来检查是否设置了值。