In php, is 0 treated as empty?

PhpFunction

Php Problem Overview


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"??

Php Solutions


Solution 1 - Php

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.

Solution 2 - Php

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

Solution 3 - Php

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";
}

Solution 4 - Php

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.

Solution 5 - Php

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!';
}

Solution 6 - Php

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.

Solution 7 - Php

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

Solution 8 - Php

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

Solution 9 - Php

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

Solution 10 - Php

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.

Solution 11 - Php

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

Solution 12 - Php

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.

Solution 13 - Php

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

In my case this code worked.

Solution 14 - Php

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

Solution 15 - Php

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.

Solution 16 - Php

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

Solution 17 - Php

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.

Solution 18 - Php

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmysqllearnerView Question on Stackoverflow
Solution 1 - PhpdecezeView Answer on Stackoverflow
Solution 2 - PhpDan SoapView Answer on Stackoverflow
Solution 3 - PhpKhandad NiaziView Answer on Stackoverflow
Solution 4 - PhpCalin RusuView Answer on Stackoverflow
Solution 5 - PhpOliver WilliamsView Answer on Stackoverflow
Solution 6 - PhpElzo ValugiView Answer on Stackoverflow
Solution 7 - PhpsoulmergeView Answer on Stackoverflow
Solution 8 - Phpbhu1stView Answer on Stackoverflow
Solution 9 - PhpToan Nguyen ThaiView Answer on Stackoverflow
Solution 10 - PhpcodaddictView Answer on Stackoverflow
Solution 11 - PhpAdam KissView Answer on Stackoverflow
Solution 12 - PhparashView Answer on Stackoverflow
Solution 13 - PhpCherrishView Answer on Stackoverflow
Solution 14 - PhpVeershettyView Answer on Stackoverflow
Solution 15 - PhpPaul WolbersView Answer on Stackoverflow
Solution 16 - PhpManish SharmaView Answer on Stackoverflow
Solution 17 - PhpAlex TannerView Answer on Stackoverflow
Solution 18 - PhpSayed Mohd AliView Answer on Stackoverflow