'0' as a string with empty() in PHP
Solution 1
You cannot make empty() take it. That is how it was designed. Instead you can write an and
statement to test:
if (empty($var) && $var !== '0') {
echo $var . ' is empty';
}
You could use isset
, unless of course, you want it to turn away the other empties that empty
checks for.
Solution 2
You cannot with empty
. From the PHP Manual:
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)
You have to add an additional other check.
Solution 3
You can't with only empty(). See the manual. You can do this though:
if ($var !== '0' && empty($var)) {
echo "$var is empty and is not string '0'";
}
Basically, empty() does the same as:
if (!$var) ...
But it doesn't trigger a PHP notice when the variable is not set.
Solution 4
PHP has different functions which can be used to test the value of a variable. Three useful functions for this are isset(), empty(), and is_null(). All these function return a boolean value. If these functions are not used in correct way they can cause unexpected results.
isset() and empty() are often viewed as functions that are opposite, however this is not always true. In this post I will explain the differences between these functions.
isset()
isset — Determine if a variable is set and is not NULL
In other words, it returns true only when the variable is not null. empty()
empty — Determine whether a variable is empty
In other words, it will return true if the variable is an empty string, false, array(), NULL, “0?, 0, and an unset variable. is_null()
is_null — Finds whether a variable is NULL
In other words, it returns true only when the variable is null. is_null() is opposite of isset(), except for one difference that isset() can be applied to unknown variables, but is_null() only to declared variables.
The table in picture is an easy reference for what these functions will return for different values. The blank spaces means the function returns bool (false).
Also I have made a custom function for checking all stuff:
function checkEmpty($var, $term = ""){
if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){
return true;
}
else{
if($term != ""){
return array("status" => "error", "desc" => "$term can not be empty");
}
else{
return array("status" => "error", "desc" => "value can not be empty");
}
}
}
Solution 5
You can't. From the 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)
Comments
-
Run over 3 years
I want a 0 to be considered as an integer and a '0' to be considered as a string, but empty() considers the '0' as a string in the example below,
$var = '0'; // Evaluates to true because $var is empty if (empty($var)) { echo '$var is empty'; }
How can I 'make' empty() to take '0's as strings?