Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: what's an alternative to empty(), where string "0" is not treated as empty? [duplicate]

Tags:

php

Possible Duplicate:
Fixing the PHP empty function

In PHP, empty() is a great shortcut because it allows you to check whether a variable is defined AND not empty at the same time.

What would you use when you don't want "0" (as a string) to be considered empty, but you still want false, null, 0 and "" treated as empty?

That is, I'm just wondering if you have your own shortcut for this:

if (isset($myvariable) && $myvariable != "") ;// do something
if (isset($othervar  ) && $othervar   != "") ;// do something
if (isset($anothervar) && $anothervar != "") ;// do something
// and so on, and so on

I don't think I can define a helper function for this, since the variable could be undefined (and therefore couldn't be passed as parameter).

like image 739
thomasrutter Avatar asked Apr 09 '09 05:04

thomasrutter


People also ask

Is 0 considered empty 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)

Is NULL the same as 0 in PHP?

NULL essentially means a variable has no value assigned to it; false is a valid Boolean value, 0 is a valid integer value, and PHP has some fairly ugly conversions between 0 , "0" , "" , and false . Show activity on this post. Null is nothing, False is a bit, and 0 is (probably) 32 bits.

What is not empty function in PHP?

PHP empty() Function The empty() function checks whether a variable is empty or not. This function returns false if the variable exists and is not empty, otherwise it returns true. The following values evaluates to empty: 0.

IS NULL same as empty PHP?

is_null() The empty() function returns true if the value of a variable evaluates to false . This could mean the empty string, NULL , the integer 0 , or an array with no elements. On the other hand, is_null() will return true only if the variable has the value NULL .


3 Answers

This should do what you want:

function notempty($var) {     return ($var==="0"||$var); } 

Edit: I guess tables only work in the preview, not in actual answer submissions. So please refer to the PHP type comparison tables for more info.

 notempty("")       : false notempty(null)     : false notempty(undefined): false notempty(array())  : false notempty(false)    : false notempty(true)     : true notempty(1)        : true notempty(0)        : false notempty(-1)       : true notempty("1")      : true notempty("0")      : true notempty("php")    : true 

Basically, notempty() is the same as !empty() for all values except for "0", for which it returns true.


Edit: If you are using error_reporting(E_ALL), you will not be able to pass an undefined variable to custom functions by value. And as mercator points out, you should always use E_ALL to conform to best practices. This link (comment #11) he provides discusses why you shouldn't use any form of error suppression for performance and maintainability/debugging reasons.

See orlandu63's answer for how to have arguments passed to a custom function by reference.

like image 168
Calvin Avatar answered Sep 22 '22 23:09

Calvin


function isempty(&$var) {     return empty($var) || $var === '0'; } 

The key is the & operator, which passes the variable by reference, creating it if it doesn't exist.

like image 36
moo Avatar answered Sep 24 '22 23:09

moo


if(isset($var) && ($var === '0' || !empty($var)))
{
}
like image 20
Bart S. Avatar answered Sep 24 '22 23:09

Bart S.