note 90767 deleted from function.empty by cmb
| From: | cmb@php.net | Date: | Sun, 01 Dec 2019 09:25:24 +0000 |
| Subject: | note 90767 deleted from function.empty by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-213364@lists.php.net to get a copy of this message | ||
Note Submitter: emperoruk at dontspam dot hotmail dot com
----
When using the php empty() function to check submitted variables such as $_POST or $_GET, be careful
to remember that values 0 (integer) and "0" (string with zero character) are all
considered empty. eg. in a simple cms a page ID of zero might be used to indicate that the homepage
should be displayed but using the following code:
<?php
if (isset($_GET['pid'] && !empty($_GET['pid']) {
// assign value to local variable
$pageID = $_GET['pid'];
} else {
echo "missing variable 'pageID'";
}
?>
When attempting to display the homepage using a pid of zero the above code will fail.
So as a result i wrote a small function to replace the php empty() function in situations where you
want 0 and "0" not to be considered empty.
<?php
function is_empty($var, $allow_false = false, $allow_ws = false) {
if (!isset($var) || is_null($var) || ($allow_ws == false && trim($var) == ""
&& !is_bool($var)) || ($allow_false === false && is_bool($var) && $var ===
false) || (is_array($var) && empty($var))) {
return true;
} else {
return false;
}
}
?>
This function will allow you to test a variable is empty and considers the following values as
empty:
an unset variable -> empty
null -> empty
0 -> NOT empty
"0" -> NOT empty
false -> empty
true -> NOT empty
'string value' -> NOT empty
" " (white space) -> empty
array() (empty array) -> empty
There are two optional parameters:
$allow_false: setting this to true will make the function consider a boolean value of false as NOT
empty. This parameter is false by default.
$allow_ws: setting this to true will make the function consider a string with nothing but white
space as NOT empty. This parameter is false by default.
In Testing:
<?php
// an unset variable
echo 'unset variable ($notset) - Empty: ';
echo is_empty($notset) ? 'yes<br />' : 'no<br />';
// NULL variable
echo 'null - Empty: ';
$var = null;
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// integer 0
echo '0 - Empty: ';
$var = 0;
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// string "0"
echo 'string "0" - Empty: ';
$var = "0";
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// boolean value false
echo 'false - Empty: ';
$var = false;
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// allow boolean value false
echo 'false ($allow_false = true) - Empty: ';
$var = false;
echo is_empty($var, true) ? 'yes<br />' : 'no<br />';
// boolean value true
echo 'true - Empty: ';
$var = true;
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// string
echo 'string "foo" - Empty: ';
$var = "foo";
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// white space
echo 'white space " " - Empty: ';
$var = " ";
echo is_empty($var) ? 'yes<br />' : 'no<br />';
// allow white space
echo 'white space ($allow_ws = true) " " - Empty: ';
$var = " ";
echo is_empty($var, false, true) ? 'yes<br />' : 'no<br />';
// empty array
echo 'empty array - Empty: ';
$var = array();
echo is_empty($var) ? 'yes<br />' : 'no<br />';
?>
the above code outputs the following:
unset variable ($notset) - Empty: yes
null - Empty: yes
0 - Empty: no
string "0" - Empty: no
false - Empty: yes
false ($allow_false = true) - Empty: no
true - Empty: no
string "foo" - Empty: no
white space " " - Empty: yes
white space ($allow_ws = true) " " - Empty: no
empty array - Empty: yes
Hope this code is useful for someone.
Michael