mysqllearner
mysqllearner

Reputation: 13903

In php, is 0 treated as empty?

Code will explain more:

$var = 0;

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

The result returns "Its empty". I thought empty() will check if I already set the variable and have value inside. Why it returns "Its empty"??

Upvotes: 193

Views: 247438

Answers (18)

Dan Soap
Dan Soap

Reputation: 10248

I was wondering why nobody suggested the extremely handy Type comparison table. It answers every question about the common functions and compare operators.

A snippet:

Expression      | empty($x)
----------------+--------
$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   

Along other cheatsheets, I always keep a hardcopy of this table on my desk in case I'm not sure

Upvotes: 102

deceze
deceze

Reputation: 522024

http://php.net/empty

The following things are considered to be empty:

  • "" (an empty string)
  • 0 (0 as an integer)
  • 0.0 (0 as a float)
  • "0" (0 as a string)
  • NULL
  • FALSE
  • array() (an empty array)
  • var $var; (a variable declared, but without a value in a class)

Note that this is exactly the same list as for a coercion to Boolean false. empty is simply !isset($var) || !$var. Try isset instead.

Upvotes: 251

Veershetty
Veershetty

Reputation: 21

You need to use isset() to check whether value is set.

Upvotes: 2

Sayed Mohd Ali
Sayed Mohd Ali

Reputation: 2254

proper example. just create int type field( example mobile number) in the database and submit an blank value for the following database through a form or just insert using SQL. what it will be saved in database 0 because it is int type and cannot be saved as blank or null. therefore it is empty but it will be saved as 0. so when you fetch data through PHP and check for the empty values. it is very useful and logically correct.

0.00, 0.000, 0.0000 .... 0.0...0 is also empty and the above example can also be used for storing different type of values in database like float, double, decimal( decimal have different variants like 0.000 and so on.

Upvotes: 0

Alex Tanner
Alex Tanner

Reputation: 21

Not sure if there are still people looking for an explanation and a solution. The comments above say it all on the differences between TRUE / FALSE / 1 / 0.
I would just like to bring my 2 cents for the way to display the actual value.

BOOLEAN

If you're working with a Boolean datatype, you're looking for a TRUE vs. FALSE result; if you store it in MySQL, it will be stored as 1 resp. 0 (if I'm not mistaking, this is the same in your server's memory).

So to display the the value in PHP, you need to check if it is true (1) or false (0) and display whatever you want: "TRUE" or "FALSE" or possibly "1" or "0".
Attention, everything bigger (or different) than 0 will also be considered as TRUE in PHP. E.g.: 2, "abc", etc. will all return TRUE.

BIT, TINYINT

If you're working with a number datatype, the way it is stored is the same.
To display the value, you need to tell PHP to handle it as a number. The easiest way I found is to multiply it by 1.

Upvotes: 0

Elzo Valugi
Elzo Valugi

Reputation: 27866

From a linguistic point of view empty has a meaning of without value. Like the others said you'll have to use isset() in order to check if a variable has been defined, which is what you do.

Upvotes: 6

Manish Sharma
Manish Sharma

Reputation: 1

use only ($_POST['input_field_name'])!=0 instead of !($_POST['input_field_name'])==0 then 0 is not treated as empty.

Upvotes: 0

Paul Wolbers
Paul Wolbers

Reputation: 1

empty should mean empty .. whatever deceze says.

When I do

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

I expect that var_dump(empty($var)); will return false.

if you are checking things in an array you always have to do isset($var) first.

Upvotes: 0

Toan Nguyen Thai
Toan Nguyen Thai

Reputation: 71

It 's working for me!

//
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']=''

Upvotes: 4

bhu1st
bhu1st

Reputation: 1318

To accept 0 as a value in variable use isset

Check if variable is empty

$var = 0;

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

Check if variable is set

$var = 0;

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

Upvotes: 4

Calin Rusu
Calin Rusu

Reputation: 195

Use strlen() instead. I ran onto the same issue using 1/0 as possible values for some variables. I am using if (strlen($_POST['myValue']) == 0) to test if there is a character or not in my variable.

Upvotes: 16

Oliver Williams
Oliver Williams

Reputation: 6334

I was recently caught with my pants down on this one as well. The issue we often deal with is unset variables - say a form element that may or may not have been there, but for many elements, 0 (or the string '0' which would come through the post more accurately, but still would be evaluated as "falsey") is a legitimate value say on a dropdown list.

using empty() first and then strlen() is your best best if you need this as well, as:

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

Upvotes: 13

Cherrish
Cherrish

Reputation: 11

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

In my case this code worked.

Upvotes: 1

Khandad Niazi
Khandad Niazi

Reputation: 2396

In case of numeric values you should use is_numeric function:

$var = 0;

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

Upvotes: 54

arash
arash

Reputation: 11

Actually isset just check if the variable sets or not.In this case if you want to check if your variable is really zero or empty you can use this example:

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

if ($myVar===0)
{
  echo "also zero!";
}

just for notice $myVar==0 act like empty function.

Upvotes: 1

soulmerge
soulmerge

Reputation: 75704

empty() returns true for everything that evaluates to FALSE, it is actually a 'not' (!) in disguise. I think you meant isset()

Upvotes: 6

Adam Kiss
Adam Kiss

Reputation: 11859

From manual: Returns FALSE if var has a non-empty and non-zero value.

The following things are considered to be empty:

  • "" (an empty string)
  • 0 (0 as an integer)
  • "0" (0 as a string) NULL
  • FALSE array() (an empty array) var
  • $var; (a variable declared, but without a value in a class)

More: http://php.net/manual/en/function.empty.php

Upvotes: 2

codaddict
codaddict

Reputation: 454970

The following things are considered to be empty:

  • "" (an empty string)
  • 0 (0 as an integer)
  • "0" (0 as a string)
  • NULL
  • FALSE
  • array() (an empty array)
  • var $var; (a variable declared, but without a value in a class)

From PHP Manual

In your case $var is 0, so empty($var) will return true, you are negating the result before testing it, so the else block will run giving "Its empty" as output.

Upvotes: 2

Related Questions