web-dev-qa-db-fra.com

En php, est-il traité comme vide?

Code expliquera plus:

$var = 0;

if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}

Le résultat retourne "Son vide". Je pensais que empty () vérifiera si j'ai déjà défini la variable et si sa valeur est interne. Pourquoi il retourne "Son vide" ??

100
mysqllearner

http://php.net/empty

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)

Notez qu'il s'agit exactement de la même liste que pour une contrainte sur Boolean false. empty est tout simplement !isset($var) || !$var. Essayez isset à la place.

146
deceze

Je me demandais pourquoi personne ne suggérait le très pratique Tableau de comparaison des types . Il répond à toutes les questions sur les fonctions communes et compare les opérateurs.

Un extrait:

Expression      | empty()
----------------+--------
$x = "";        | true    
$x = null       | true    
var $x;         | true    
$x is undefined | true    
$x = array();   | true    
$x = false;     | true    
$x = true;      | false   
$x = 1;         | false   
$x = 42;        | false   
$x = 0;         | true    
$x = -1;        | false   
$x = "1";       | false   
$x = "0";       | true    
$x = "-1";      | false   
$x = "php";     | false   
$x = "true";    | false   
$x = "false";   | false   

Parmi les autres feuilles de triche, je garde toujours une copie papier de cette table sur mon bureau au cas où je ne suis pas sûr

64
Dan Soap

En cas de valeurs numériques, vous devez utiliser la fonction is_numeric:

$var = 0;

if (is_numeric($var))
{
  echo "Its not empty";
} 
else 
{
    echo "Its empty";
}
29
Khandad Niazi

Utilisezstrlen()à la place de . J'ai rencontré le même problème en utilisant 1/0 comme valeurs possibles pour certaines variables . J'utilise if (strlen($_POST['myValue']) == 0) pour tester s'il y a un caractère ou non dans ma variable.

8
Calin Rusu

J'ai récemment été pris avec mon pantalon sur celui-ci également. Le problème que nous traitons souvent est celui des variables non définies. Par exemple, un élément de formulaire qui n’a peut-être pas été présent, mais pour de nombreux éléments, 0 (ou la chaîne '0' qui apparaîtrait plus précisément dans la publication, mais serait néanmoins évaluée comme " falsey ") est une valeur légitime, disons sur une liste déroulante.

utiliser empty() en premier, puis strlen() est votre meilleur choix si vous en avez besoin, ainsi:

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}
8
Oliver Williams

D'un point de vue linguistique vide a la signification de sans valeur . Comme les autres l'ont dit, vous devrez utiliser isset() pour vérifier si une variable a été définie, et c'est ce que vous faites.

6
Elzo Valugi

Cela fonctionne pour moi!

//
if(isset($_POST['post_var'])&&$_POST['post_var']!==''){
echo $_POST['post_var'];
}

//results:
1 if $_POST['post_var']='1'
0 if $_POST['post_var']='0'
skip if $_POST['post_var']=''
4
Toan Nguyen Thai

Pour accepter 0 comme valeur dans la variable, utilisez isset

Vérifier si la variable est vide

$var = 0;

if ($var == '') {
    echo "empty";
} else {
    echo "not empty"; 
}
//output is empty

Vérifier si la variable est définie

$var = 0;

if (isset($var)) {
    echo "not empty";
} else {    
    echo "empty";
}
//output is not empty
2
bhu1st

empty() renvoie true pour tout ce qui est évalué à FALSE, il s'agit en fait d'un 'not' (!) déguisé. Je pense que vous vouliez dire isset()

2
soulmerge
if (empty($var) && $pieces[$var] != '0') {
//do something
}

Dans mon cas, ce code a fonctionné.

1
Cherrish

From manual: 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) NULL
  • FALSE array () (un tableau vide) var
  • $ var; (une variable déclarée, mais sans valeur dans une classe)

Plus: http://php.net/manual/en/function.empty.php

1
Adam Kiss

bon exemple. Il suffit de créer un champ de type int (exemple: numéro de mobile) dans la base de données et de soumettre une valeur vide pour la base de données suivante via un formulaire ou de simplement l'insérer à l'aide de SQL. ce qui sera enregistré dans la base de données 0 car il est de type int et ne peut pas être enregistré comme vide ou nul. par conséquent, il est vide mais il sera enregistré en tant que 0. Ainsi, lorsque vous récupérez des données via PHP et que vous recherchez les valeurs vides. c'est très utile et logiquement correct.

0.00, 0.000, 0.0000 .... 0.0 ... 0 est également vide et l'exemple ci-dessus peut également être utilisé pour stocker différents types de valeurs dans une base de données telles que float, double, decimal (décimal (différentes variantes telles que 0.000, etc.).

0
Sayed Mohd Ali

vide doit signifier vide .. quoi que dise Deceze. 

Quand je fais 

$var = '';    
$var = '0';

Je m'attends à ce que var_dump(empty($var)); renvoie false.

si vous vérifiez des choses dans un tableau, vous devez toujours commencer par isset($var).

0
Paul Wolbers

Vous devez utiliser isset () pour vérifier si la valeur est définie.

0
Veershetty

utilisez seulement ($_POST['input_field_name'])!=0 au lieu de !($_POST['input_field_name'])==0, 0 n'est pas considéré comme vide.

0
Manish Sharma

Pas sûr s'il y a encore des gens qui cherchent une explication et une solution. Les commentaires ci-dessus disent tout sur les différences entre TRUE/FALSE/1/0.
Je voudrais juste apporter mes 2 cents pour la façon d’afficher la valeur réelle.

BOOLÉAN

Si vous travaillez avec un type de données booléen, vous recherchez un résultat VRAI ou FAUX. si vous le stockez dans MySQL, il sera stocké sous la forme 1, respectivement. 0 (si je ne me trompe pas, c'est la même chose dans la mémoire de votre serveur).

Donc, pour afficher la valeur en PHP, vous devez vérifier si elle est vraie (1) ou fausse (0) et afficher ce que vous voulez: "vrai" ou "faux" ou éventuellement "1" ou "0".
Attention, tout ce qui est plus grand (ou différent) que 0 sera également considéré comme TRUE en PHP. Exemple: 2, "abc", etc. retournera tous VRAI .

BIT TINYINT

Si vous travaillez avec un type de données numérique, la façon dont il est stocké est la même.
Pour afficher la valeur, vous devez dire PHP de la traiter comme un nombre. Le moyen le plus simple que j'ai trouvé est de le multiplier par 1.

0
Alex Tanner

En fait, il suffit de vérifier si la variable est définie ou non. Dans ce cas, si vous souhaitez vérifier si votre variable est réellement nulle ou vide, vous pouvez utiliser cet exemple:

$myVar = '';
if (empty($myVar))
{
  echo "Its empty";
}
echo "<br/>";

if ($myVar===0)
{
  echo "also zero!";
}

juste pour avis $ myVar == 0 agit comme une fonction vide.

0
arash

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)

De PHP Manuel

Dans votre cas, $var est 0, donc empty($var) renverra true, vous annulerez le résultat avant de le tester. Le bloc else s'exécutera en donnant le résultat "Its empty".

0
codaddict