2010-11-09 18 views
16

Quiero que un 0 sea considerado como un entero y un '0' para ser considerado como una cadena, pero empty() considera '0' como una cadena en el ejemplo a continuación,php: '0' como una cadena con empty()

$var = '0'; 

// Evaluates to true because $var is empty 
if (empty($var)) { 
    echo '$var is empty'; 
} 

¿cómo puedo 'hacer' vacío() para tomar '0's as strings?

gracias.

+1

Usted puede encontrar esto útil: http://www.php.net /manual/en/types.comparisons.php – zzzzBov

+0

muchas gracias! – laukok

Respuesta

27

No puede hacerlo. Así es como fue diseñado. En su lugar se puede escribir una declaración and a prueba:

if (empty($var) && $var !== '0') { 
    echo $var . ' is empty'; 
} 

Usted podría utilizar isset, a menos que, por supuesto, usted quiere que se apartan los otros vacíos, que empty cheques por.

Editar

ha solucionado el cheque para hacer una verificación de tipos así, gracias al 2,371 por señalarlo :)

+3

'& $ var! = '0'' Esto es incorrecto: 0 ==' 0 'en PHP. Use ===. – 2371

+1

! == eso es .... –

+0

Cualquiera o se ha solucionado anteriormente. –

0

En este caso, no use empty, utilice isset() en su lugar. Esto también permitirá 0 como un número entero.

$var = '0'; 
if (!isset($var)) { 
    print '$var is not set'; 
} 

$var = 0; 
if (!isset($var)) { 
    print '$var is not set'; 
} 

Ninguno debe imprimir nada.

6

Usted no puede con empty. From the PHP Manual:

las siguientes cosas se consideran vacío:

  • "" (una cadena vacía)
  • 0 (0 como un entero)
  • "0" (0 como una cadena)
  • NULL
  • FALSO
  • array() (una matriz vacía)
  • var $ var; (Una variable declarada, pero sin un valor en una clase)

Usted tiene que agregar otro control adicional.

2

En ambos casos, empty() devolverá true. Verifique el documento - http://php.net/empty.

Sugiero utilizar una función diferente para que coincida con su especificación.

3

No puede. De the manual

Devuelve FALSE si var tiene un valor no vacío y distinto de cero.

las siguientes cosas se consideran vacío:

  • "" (una cadena vacía)
  • 0 (0 como un entero)
  • "0" (0 como una cadena)
  • NULL
  • FALSO
  • array() (una matriz vacía)
  • var $ var; (Una variable declarada, pero sin un valor en una clase)
6

No se puede, con sólo vacía(). Vea el manual. Puede hacer esto sin embargo:

if ($var !== '0' && empty($var)) { 
    echo "$var is empty and is not string '0'"; 
} 

Básicamente, vacía() hace lo mismo que:

if (!$var) ... 

Pero no dispara un aviso de PHP cuando no se establece la variable.

+0

muchas gracias! – laukok

1
$var = '0'; 

// Evaluates to true because $var is empty 
if (empty($var) && $var !== '0') { 
    echo '$var is empty or the string "0"'; 
} 
+0

muchas gracias! – laukok

2

empty es, con mucho, la función más confuso e inútil en el repertorio php. No lo uses

Hay tres cosas separadas que desea saber al verificar un valor.

  • el valor existe (uso isset)
  • el valor tiene un tipo específico (uso is_xxx)
  • el valor tiene propiedades específicas (operadores de comparación de uso, expresiones strpos o regular).

(los dos últimos se pueden combinar en uno con typecasts o '===').

Ejemplos:

if(isset($var) && is_string($var) && strlen($var) > 0)... 
if(isset($var) && intval($var) > 0)... 
if(isset($var) && $var === '0')... 

Esto parece más detallado, pero muestra claramente lo que está haciendo. Para los objetos estructurales, a menudo tiene sentido tener un atajo de acceso directo, p.

/// get a string 
function s($ary, $key, $default = '') { 
    if(!isset($ary[$key])) return $default; 
    $s = trim($ary[$key]); 
    return strlen($s) ? $s : $default; 
} 
/// get a natural number 
function n($ary, $key, $default = 0) { 
    $n = intval(s($ary, $key)); 
    return $n > 0 ? $n : $default; 
} 

$name = s($_POST, 'name'); 
$age = n($_POST, 'age'); 
+0

esto es genial, gracias! – laukok

+0

Lo anterior es un poco confuso en esto: 'is_int ($ var)' prueba si '$ var' es un entero * o * una cadena en formato entero. Entonces, por ejemplo, 'is_int (" 0 ")' devolverá verdadero. Para obtener el tipo interno de una variable, use 'gettype ($ var)'. Por ejemplo, 'if (gettype ($ var) ===" integer ")'. –

2

siempre añado a mi base de código

function is_blank($value) { 
    return empty($value) && !is_numeric($value); 
} 

y lo uso en lugar de vacío(). Resuelve el problema de mantener los ceros (int, float o string) como no vacíos.

Ver http://www.php.net/manual/en/function.empty.php#103756 que se añadió mayo de 2011.

-1

if ((is_array($var) && empty($var)) || strlen($var) === 0) { echo $var . ' is empty'; }

+0

Como esto hace mucho más de lo que el OP solicitó, una breve explicación mejoraría en gran medida su respuesta. – RandomSeed

0

No se puede, pues entero, cadena, flotador, null no importa para PHP.

Debido a que es fresco :)

Debe comprobar característica de las características de is_numeric variables, isset, ===, strlen, etc.

Por ejemplo:

if (strlen(@$var)==0) { 
    echo @$var . ' is empty'; 
} 

o

if (@$var==="" || !isset($var)) { 
    echo @$var . ' is empty'; 
} 

u otros ejemplos :)

gracias por leer.

+0

Agregue una descripción de disparo a su respuesta, por qué y cómo estas alternativas resuelven el problema inicial. Esto ayuda al lector a comprender mejor la solución. – user1438038

1

PHP tiene diferentes funciones que se pueden utilizar para probar el valor de una variable. Tres funciones útiles para esto son isset(), empty() e is_null(). Todas estas funciones devuelven un valor booleano. Si estas funciones no se utilizan de la manera correcta, pueden causar resultados inesperados.

isset() y empty() a menudo se ven como funciones que son opuestas, sin embargo, esto no siempre es así. En este post explicaré las diferencias entre estas funciones.

isset()

From PHP manual – isset():

isset — Determine if a variable is set and is not NULL 

En otras palabras, devuelve cierto sólo cuando la variable no es nulo. vacío()

From PHP Manual – empty():

empty — Determine whether a variable is empty 

En otras palabras, devolverá verdadero si la variable es una cadena vacía, falsa, array(), NULL, “0 ?, 0, y una variable unset . is_null()

From PHP Manual – is_null():

is_null — Finds whether a variable is NULL 

En otras palabras, devuelve cierto sólo cuando la variable es nula. is_null() es opuesto a isset(), excepto por una diferencia de que isset() se puede aplicar a variables desconocidas, pero is_null() solo a variables declaradas.

La tabla en la imagen es una referencia fácil de lo que devolverán estas funciones para diferentes valores. Los espacios en blanco significa que la función devuelve bool (falso). enter image description here

También he hecho una función personalizada para comprobar todo.

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

Si desea omitir el filtro $ vacío y no te saltar $ filter = '0' y otros valores

$filter = ''; //or $filter = '0'; or $filter = '1'; 

//trim the $filter 

if(isset($filter) and ($filter != '' or $filter == '0')) { 

//$filter data 

};