Pregunta

Quiero un 0 para ser considerado como un entero y un '0' para ser considerado como una cadena pero vacío () considera el '0' como una cadena en el siguiente ejemplo,

$var = '0';

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

¿cómo puedo 'make' vaciar () para tomar '0 como cadenas de?

gracias.

¿Fue útil?

Solución

No se puede hacer más. Esa es la forma en que fue diseñado. En su lugar se puede escribir una declaración and a prueba:

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

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

Editar

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

Otros consejos

Usted no puede con empty. Desde el Manual de PHP:

  

Las siguientes cosas se consideran vacío:

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

Hay que añadir otro control adicional.

Puede no sólo vaciar (). Ver el manual de . Puede hacer esto sin embargo:

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

Básicamente, el tanque vacío () hace lo mismo que:

if (!$var) ...

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

No se puede. De el manual

  

devuelve falso si var tiene un valor que no esté vacío y que no sea cero.

     

Las siguientes cosas se consideran vacío:

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

PHP tiene diferentes funciones que se pueden usar para probar el valor de una variable. Tres funciones útiles para esto son isset (), vacío () y is_null (). Todas estas funciones devuelven un valor booleano. Si estas funciones no se utilizan en forma correcta pueden producir resultados inesperados.

isset () y vacío () a menudo son vistos como funciones que son opuestas, sin embargo, esto no siempre es cierto. En este post voy a explicar las diferencias entre estas funciones.

isset ()

Desde 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. vaciar ()

Desde PHP Manual - vacía ():

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 sin definir. is_null ()

Desde 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 de isset (), excepto por una diferencia que isset () puede aplicarse a variables desconocidas, pero is_null () sólo a las variables declaradas.

La tabla de la imagen es una referencia fácil para lo que estas funciones devolverán para diferentes valores. Los espacios en blanco significa la función devuelve bool (false). introducir descripción de la imagen aquí

función personalizada he hecho también para el control de todas las cosas.

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

En ambos casos su empty() volverá true. Compruebe el doc -. http://php.net/empty

sugiere emplear una función diferente para que coincida con su especificación.

Siempre añadir a mi base de código

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

y el uso que en lugar de vacío (). Resuelve el problema de mantener los ceros (int, float o de cadena) que no esté vacía.

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

$var = '0';

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

empty es de lejos el más confuso e inútil función en el repertorio php. No lo utilice.

Hay tres cosas separadas desea saber al comprobar un valor.

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

(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 getter de acceso directo, por ejemplo.

 /// 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');

En este caso no utilice vacío, isset uso () en lugar de él. Esto también permitirá 0 como un entero.

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

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

Ni debe imprimir nada.

no pueda, por entero, cadena, flotador, null no importa para PHP.

Debido a que es cool:)

Debe comprobar característica presenta la variable de is_numeric, 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.

Si desea omitir el filtro $ vacío y no te salta $ filter = '0' y los demás valores

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

//trim the $filter

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

//$filter data 

};

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top