web-dev-qa-db-fra.com

php: '0' sous forme de chaîne avec empty ()

Je veux qu'un 0 soit considéré comme un entier et un '0' à une chaîne mais empty () considère 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" empty () pour prendre "0" en chaîne?

merci.

21
laukok

Vous ne pouvez pas le faire. C'est comme ça que ça a été conçu. Au lieu de cela, vous pouvez écrire une instruction and pour tester:

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

Vous pouvez utiliser isset, à moins bien sûr que vous souhaitiez que celui-ci élimine les autres espaces vides que empty recherche.

Modifier

Correction de la vérification pour faire une vérification de type aussi, merci au 2371 pour l'avoir signalé :)

34
Brad F Jacobs

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

Les éléments suivants sont considérés comme vides:

  • "" (une chaîne vide)
  • 0 (0 as an integer)
  • "0" (0 sous forme de chaîne)
  • NUL
  • FALSE
  • array () (un tableau vide)
  • var $ var; (une variable déclarée, mais sans valeur dans une classe)

Vous devez ajouter un autre chèque.

8
Gordon

Vous ne pouvez pas avec seulement vide (). Voir le manuel . Vous pouvez le faire cependant:

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

En gros, empty () fait la même chose que:

if (!$var) ...

Mais ne déclenche pas d'avis PHP lorsque la variable n'est pas définie.

6
netcoder

Tu ne peux pas. De le manuel

Renvoie FALSE si var a une valeur non vide et non nulle.

Les éléments suivants sont considérés comme vides:

  • "" (une chaîne vide)
  • 0 (0 as an integer)
  • "0" (0 sous forme de chaîne)
  • NUL
  • FALSE
  • array () (un tableau vide)
  • var $ var; (une variable déclarée, mais sans valeur dans une classe)
3
Hamish

PHP a différentes fonctions qui peuvent être utilisées pour tester la valeur d'une variable. Isset (), empty () et is_null () sont trois fonctions utiles. Toutes ces fonctions renvoient une valeur booléenne. Si ces fonctions ne sont pas utilisées correctement, elles peuvent entraîner des résultats inattendus.

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

isset ()

À partir du manuel PHP - isset ():

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

En d'autres termes, il ne renvoie vrai que lorsque la variable n'est pas null . Empty ()

De PHP Manuel - vide ():

empty — Determine whether a variable is empty

En d'autres termes, il renverra true si la variable est une chaîne vide, false, array (), NULL, «0 ?, 0 et une variable non définie . Is_null ()

De PHP Manuel - is_null ():

is_null — Finds whether a variable is NULL

En d'autres termes, il ne renvoie vrai que lorsque la variable est null. is_null () est l'opposé de isset (), à une différence près que isset () peut être appliqué aux variables inconnues, mais is_null () uniquement aux variables déclarées. 

Le tableau en image est une référence facile pour ce que ces fonctions renverront pour différentes valeurs. Les espaces vides signifient que la fonction retourne bool (false) .  enter image description here

De plus, j'ai créé une 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");
        }
    }
}
3
manish1706

empty() renverra true. Consultez la doc - http://php.net/empty .

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

2
Jason McCreary

empty est de loin la fonction la plus déroutante et la plus inutile du 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 (use isset)
  • la valeur a un type spécifique (utilisez is_xxx)
  • la valeur a des propriétés spécifiques (opérateurs de comparaison, strpos ou expressions régulières).

(les deux derniers peuvent être combinés en un seul avec des émissions de type 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 verbeux, mais montre clairement ce que vous faites. Pour les objets structurels, il est souvent judicieux de choisir un raccourci, par ex.

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

J'ajoute toujours à ma base de code

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

et l'utiliser au lieu de empty (). Cela résout le problème de garder les zéros (int, float ou string) non vides.

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

2
Stemar
$var = '0';

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

Dans ce cas, n'utilisez pas vide, utilisez isset () à la place. 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.

0
Viper_Sb

Vous ne pouvez pas, car integer, string, float, null n’a pas d’importance pour PHP.

Parce que c'est cool :)

Vous devez vérifier les caractéristiques de votre variable is_numeric, 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 d'avoir lu.

0
Ferhat KOÇER

Si vous voulez ignorer $ filter vide et ne pas ignorer $ filter = '0' et autres Values ​​

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

//trim the $filter

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

//$filter data 

};
0
Ivan Procopet