Question

Je veux un 0 à être considéré comme un entier et un « 0 » doit être considérée comme une chaîne, mais vide () considère que le « 0 » comme une chaîne dans l'exemple ci-dessous,

$var = '0';

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

comment puis-je 'faire' vide () pour prendre « des 0 sous forme de chaînes?

merci.

Était-ce utile?

La solution

Vous ne pouvez pas le faire. Voilà comment il a été conçu. vous pouvez plutôt écrire une déclaration and à tester:

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

Vous pouvez utiliser isset, à moins bien sûr, vous voulez qu'il détournez les wagons vides, que les contrôles de empty pour.

Modifier

Correction de la vérification pour faire une vérification de type aussi bien, grâce à la 2371 pour le souligner:)

Autres conseils

Vous ne pouvez pas avec empty. A partir du manuel PHP:

  

sont considérés comme les choses suivantes à vide:

     
      
  • "" (une chaîne vide)
  •   
  • 0 (0 en tant que nombre entier)
  •   
  • "0" (0 sous forme de chaîne)
  •   
  • NULL
  •   
  • false
  •   
  • array () (un tableau vide)
  •   
  • var $ var; (Une variable déclarée, mais sans valeur dans une classe)
  •   

Vous devez ajouter une autre vérification supplémentaire.

Vous ne pouvez pas. De manuel

  

Retourne FALSE si var a un non-vide et valeur non nulle.

     

sont considérés comme les choses suivantes à vide:

     
      
  • "" (une chaîne vide)
  •   
  • 0 (0 en tant que nombre entier)
  •   
  • "0" (0 sous forme de chaîne)
  •   
  • NULL
  •   
  • false
  •   
  • array () (un tableau vide)
  •   
  • var $ var; (Une variable déclarée, mais sans valeur dans une classe)
  •   

PHP a différentes fonctions qui peuvent être utilisés pour tester la valeur d'une variable. Trois fonctions utiles pour ce sont isset (), vide () et is_null (). Toutes ces fonctions renvoient une valeur booléenne. Si ces fonctions ne sont pas utilisées de manière correcte, ils peuvent provoquer des résultats inattendus.

isset () et vide () sont souvent considérés comme des fonctions qui sont opposées, mais ce n'est pas toujours vrai. Dans ce post, je vais vous expliquer les différences entre ces fonctions.

isset ()

A partir du manuel PHP - isset ():

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

En d'autres termes, il retourne vrai que lorsque la variable est non nulle. vider ()

De PHP Manual - vide ():

empty — Determine whether a variable is empty

En d'autres termes, il retourne vrai si la variable est une chaîne vide, faux, array (), NULL, « 0 ?, 0, et une variable non défini. is_null ()

A partir de PHP Manual - is_null ():

is_null — Finds whether a variable is NULL

En d'autres termes, il retourne vrai que lorsque la variable est nulle. is_null () se trouve en face de isset (), sauf pour une différence qui isset () peut être appliquée à des variables inconnues, mais is_null () uniquement aux variables déclarées.

Le tableau de l'image est une référence facile pour ce que ces fonctions renvoient des valeurs différentes. Les espaces vides désigne la fonction rendements bool (de faux). entrer la description d'image ici

J'ai aussi fait fonction personnalisée pour vérifier toutes les choses.

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

Dans les deux cas, votre empty() retournera true. Vérifiez la doc -. http://php.net/empty

Je suggère d'utiliser une fonction différente pour correspondre à vos spécifications.

J'ai toujours ajouter à ma base de code

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

et de l'utiliser au lieu de vide (). Il résout le problème des zéros en gardant (int, float ou string) comme non vide.

Voir http://www.php.net/manual/en /function.empty.php#103756 qui a été ajouté mai 2011.

$var = '0';

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

empty est de loin la fonction la plus déroutante et inutile dans le répertoire php. Ne l'utilisez pas.

Il y a trois choses distinctes que vous voulez savoir lors de la vérification d'une valeur.

  • la valeur existe (utilisez isset)
  • la valeur a un type spécifique (utilisation de is_xxx)
  • la valeur a des propriétés spécifiques (utilisation des opérateurs de comparaison, strpos ou expressions régulières).

(les deux derniers peuvent être combinés en un seul avec typecasts ou « === »).

Exemples:

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

Cela semble plus bavard, mais montre clairement ce que vous faites. Pour les objets structurels, il est souvent préférable d'avoir un getter de raccourci, par exemple.

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

Dans ce cas, ne pas utiliser vide, utilisez isset () à la place de celui-ci. Cela permettra également à 0 comme un entier.

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

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

Ni devrait imprimer quoi que ce soit.

Vous ne pouvez pas, parce que integer, string, float, null n'a pas d'importance pour PHP.

Parce qu'il est cool:)

Vous devez vérifier votre caractéristique caractéristiques is_numeric variable, isset, ===, strlen, etc.

Par exemple:

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

ou

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

ou d'autres exemples:)

Merci pour la lecture.

Si vous voulez sauter vide filtre $ et DonT sauter $ filter = '0' et d'autres valeurs

$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'; }

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top