Comment vérifier si une variable est vide ou non en php. Entraînez-vous à utiliser la fonction PHP empty(). PHP vide() pour les objets et les tableaux

La programmation moderne manipule avec succès depuis longtemps des variables non typées. Le type de la variable ne peut pas être spécifié à l'avance et peut être modifié pendant l'exécution du programme.

Ce concept est devenu central dans le paradigme général de la programmation. Au tout début de l'ère de la programmation, les langages dotés de la même confiance approfondie exigeaient que le programmeur prédéfinisse des variables et garantissaient strictement que rien d'illégal ne leur était assigné. Ni les programmes ni les langages de programmation n'avaient la moindre idée auparavant qu'une variable change de type.

Du vide et de l'inexistant

La fonction PHP empty() est l'inverse de la fonction isset() et possède des fonctionnalités d'utilisation spéciales. S'il n'y a pas de variable, alors la première fonction répond positivement et son résultat est vrai, et la seconde répond négativement, c'est-à-dire que sa valeur sera fausse.

Par définition, isset() est conçu pour vérifier l'existence d'une variable. Peu importe quoi et comment la variable a été affectée, l'essentiel est qu'elle existe et ne soit pas détruite par la fonction unset(). Le résultat de la fonction isset() sera positif – vrai. Il est important de se rappeler que si $iVar = 0 ; alors isset($iVar) sera vrai, mais vide($iVar) sera également vrai.

Dans le premier cas, le résultat signifie que la variable existe, dans le second cas, la variable est vide, c'est-à-dire la valeur « 0 » sous n'importe quelle forme, qu'il s'agisse d'une chaîne (« 0 ») ou d'un nombre (fractionnaire - 0,0 ou entier - 0) est identique : vide ($iVar) sera vrai.

À propos de la sécurité et du contrôle

La pratique montre que les langages non typés donnent beaucoup plus de liberté au programmeur, mais supposent que son attitude envers le travail sur l'algorithme est plus responsable.

PHP offre une syntaxe moderne qui prend en charge la sémantique établie, comporte peu d'erreurs, mais nécessite une attention particulière. Par exemple, l’appel d’une fonction nécessite un certain nombre de paramètres.

Lors de l’appel d’une fonction, il n’est pas du tout nécessaire de transmettre tous les paramètres ; vous ne pouvez en transmettre qu’une partie significative. La fonction "doit" vérifier la présence et l'existence de tous les paramètres. Ceux qui manquent ou ont des valeurs incorrectes doivent être restaurés sous leur forme normale et attribuer les valeurs requises.

Dans ce contexte, la fonction PHP empty() est indispensable. Expression:

$a = "1;2" + 20

attribuera la valeur 21 à la variable $a, puisque la première partie de l'expression sera représentée par 1 et la seconde sera 20.

Le résultat sera de type nombre et la fonction PHP vide($a) aura le résultat - faux, c'est-à-dire que la variable $a n'est pas vide.

Dans ce contexte, avoir pour fonction :

fonctionTest($a ​​​​= 0, $b = 20)

Lorsque vous appelez :

$res = funcTest($aVal, $bVal)

aura ce qui est souhaité, c'est-à-dire le résultat de la fonction. Et lorsqu'on l'appelle :

  • $res = funcTest($aVal. $bVal)

Le corps de la fonction ne contient qu'un seul paramètre avec la valeur "$aVal . $bVal" et ce paramètre sera très probablement interprété comme une chaîne de caractères.

PHP vide() pour les objets et les tableaux

La syntaxe du langage comporte un nombre suffisant de constructions et de fonctions pour travailler avec des objets et des tableaux, mais du point de vue de la vérification de leur existence et de la présence d'une valeur, il n'y a pas de différences particulières par rapport aux variables.

PHP vide (tableau) - équivalent à appeler vide (variable simple). Cependant, il existe des considérations très importantes concernant les objets. Quant à vérifier l’existence d’un objet (isset), la question n’a guère de sens. Concernant Fonctions PHP empty(), alors l'opportunité de son utilisation reste remise en question.

Selon la logique de la programmation orientée objet, un objet possède son propre contenu et son propre ensemble de méthodes. Seul l'objet lui-même peut dire s'il est vide ou non, mais pas une fonction tierce, même si cela fait partie de la syntaxe du langage.

Un objet et sa fonction vide()

Sur cette base simple mais légitime, chaque objet doit être considéré dans le contexte de sa compréhension du « vide ». Par exemple, l'implémentation de l'objet « Tableau du personnel » est constituée d'enregistrements « Employé ». Mais s'il n'y a pas un seul employé, alors dans la « Liste du personnel », il y a toujours des options pour les postes d'employés potentiels.

À quel niveau dois-je utiliser la fonction objet vide PHP ici ? Au niveau « Staffing », tout existe, même s'il n'y a pas un seul salarié. Au niveau "Employé", l'objet existe déjà, même s'il n'est pas complètement rempli. Un objet pas complètement rempli peut être classé comme un objet vide. Cela n’apporte aucun avantage au tableau des effectifs.

Selon votre style de programmation, les fonctions PHP empty() et isset() sont très importantes pour construire un algorithme sûr et fiable, mais pour les objets il est quand même préférable d'avoir une variante de empty() définie par son contenu.

chaîne variable (12)

J'ai une fonction isNotEmpty qui renvoie true si la chaîne n'est pas vide et false si la chaîne est vide. J'ai découvert que cela ne fonctionnait pas si je passais une ligne vide.

Function isNotEmpty($input) ( $strTemp = $input; $strTemp = trim($strTemp); if(strTemp != "") // J'ai également essayé ceci "if(strlen($strTemp) > 0)" ( return true ; ) renvoie faux ;

La chaîne est vérifiée à l'aide de isNotEmpty :

If(isNotEmpty($userinput["phoneNumber"])) ( //valider le numéro de téléphone) else ( echo "Numéro de téléphone non renseigné
"; }

Si la ligne est vide, else n'est pas exécuté, je ne comprends pas pourquoi, quelqu'un peut-il nous éclairer à ce sujet s'il vous plaît.

Réponses

si vous avez un champ à savoir numéro_série et que vous souhaitez vérifier l'espace vide

$numéro_série = trim($_POST); $q="select * du produit où user_id="$_SESSION"" ; $rs=mysql_query($q); while($row=mysql_fetch_assoc($rs))( if(empty($_POST["irons"]))( $irons=$row["product1"]; )

de cette façon, vous pouvez parcourir toutes les boucles d'une boucle avec une autre fonction vide

Eh bien, au lieu de répondre (je crois que vous avez déjà résolu votre problème), je vais vous donner quelques conseils.

Je ne sais pas pour tout le monde, mais personnellement, je suis très ennuyé quand je vois quelque chose comme :

Si(<>) (retour vrai; ) retour faux;

cela nécessite un "retour" élégant (<>); " Veuillez toujours regarder votre code et supprimer cette logique. Pour chaque situation, vous n'avez pas besoin de l'instruction IF.

je suis juste en train d'écrire le mien propre fonction is_string pour la vérification du type et strlen pour la vérification de la longueur.

Fonction emptyStr($str) ( return is_string($str) && strlen($str) === 0; ) print emptyStr("") ? "vide" : "pas vide"; // vide

EDIT : Vous pouvez également utiliser la fonction trim pour vérifier si une chaîne ne contient pas.

Is_string($str) && strlen(trim($str)) === 0;

PHP a une fonction intégrée appelée empty() Le test se fait en tapant if(empty($string))(...) lien php.net : php vide

Vous avez la réponse, mais dans votre cas, vous pouvez utiliser

Renvoie vide($input);

Renvoie is_string($input);

Problème simple. Changement:

Si(strTemp != "")

Si($strTemp != "")

Peut-être pouvez-vous également le modifier comme suit :

Si($strTemp !== "")

puisque != "" retournera true si vous transmettez le nombre numérique 0 et quelques autres cas en raison de la conversion de type automatique de PHP.

Gardez également à l’esprit que PHP possède déjà une fonction empty().

PHP évalue une chaîne vide à false, vous pouvez donc simplement utiliser :

If (trim($userinput["phoneNumber"])) ( // valide le numéro de téléphone ) else ( echo "Numéro de téléphone non renseigné
"; }

J'utilise toujours expression régulière pour vérifier une chaîne vide, remontant à l'époque de CGI/Perl ainsi que Javascript, alors pourquoi pas PHP par exemple (bien que non testé)

Renvoie preg_match("/\S/", $input);

Où \S représente n'importe quel caractère sans espaces

Utilisez simplement la fonction strlen()

If (strlen($s)) ( // non vide)

Je me suis récemment posé la même question.
Il y a plusieurs solutions possibles, il y en a 3 valables :

  • s.indexOf(starter) === 0
  • s.substr(0,starter.length) === démarreur
  • s.lastIndexOf(starter, 0) === 0 (ajouté après avoir consulté la réponse de Mark Bayer)
  • en utilisant une boucle :

    La fonction startWith(s,starter) ( for (var i = 0,cur_c; i< starter.length; i++) { cur_c = starter[i]; if (s[i] !== starter[i]) { return false; } } return true; }

Je n'ai pas rencontré cette dernière solution qui implique l'utilisation d'une boucle.
Étonnamment, cette solution est nettement supérieure aux 3 premières.
Voici le test jsperf que j'ai effectué pour arriver à cette conclusion : http://jsperf.com/startswith2/2

ps : ecmascript 6 (harmony) introduit sa propre méthode startWith pour les chaînes.
Pensez combien de temps aurait été gagné s'ils avaient pensé à inclure cette méthode indispensable dans la première version.

Mise à jour

Notez qu'il y a 2 optimisations de boucle incluses par Steve, la première des deux a montré de meilleures performances, je publierai donc ce code ci-dessous :

La fonction commenceAvec2(str, préfixe) ( if (str.length< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === préfixe[i]); --je continue;< 0; }

je reviens DANS Significations PHP
FALSE et NULL et leurs valeurs associées sont différents de la façon dont ils sont habituellement utilisés dans d'autres langages et ont leurs propres particularités.
L'article traite de ces fonctionnalités.

Pour les débutants, cela peut être utile pour avoir une vue d’ensemble ; pour les lecteurs expérimentés, cela peut être utile pour se rafraîchir la mémoire si une nuance leur a échappé.

FAUX dans les instructions If
  • Selon la documentation PHP, les valeurs suivantes sont FALSE après conversion en booléen :
  • la valeur booléenne elle-même est FAUX
  • une chaîne vide ("") et la chaîne "0".
  • tableau vide (tableau) – tableau().
  • un objet avec zéro variable membre (PHP 4 uniquement, non couvert dans cet article)
  • valeur NULL spéciale (y compris les variables non définies)
Objets SimpleXML (non abordés dans cet article)
Cela signifie que si de telles valeurs sont transmises à la condition :
si (…) fait écho à « 1 » ; sinon, faites écho à « 0 » ;

alors la chaîne "0" sera imprimée.

Si la valeur de la variable n'est pas définie (non définie), un avertissement peut également être émis. Rappelons que l'avertissement dans la condition peut être supprimé en écrivant @ avant la variable.

Par exemple:
Si (@$undefVar) ( …)

Mais vous ne devez utiliser @ que dans des cas extrêmes, lorsque vous avez bien réfléchi et qu'il n'existe pas d'autres options appropriées. Voir la fonction isset().

is_null() renvoie TRUE uniquement pour les variables auxquelles aucune valeur n'est affectée ou auxquelles la valeur NULL est affectée.
isset() renvoie des valeurs booléennes individuelles par rapport à is_null() .
Si aucune valeur n'est attribuée à la variable, alors is_null() émet également un avertissement "Variable non définie", contrairement à isset(), qui n'émet aucun avertissement.
Rappelons que pour supprimer la valeur d'une variable, vous pouvez utiliser la fonction unset(). Vous pouvez également attribuer la valeur NULL à cet effet pour éviter les avertissements du compilateur lors de la tentative de lecture de la valeur d'une variable.

Veuillez noter que, contrairement aux variables, pour travailler avec des constantes, vous devez utiliser la construction définie().

Représentation sous forme de chaîne

Regardons la représentation sous forme de chaîne des fausses constantes.
Par exemple, la concaténation convertit les valeurs dans les chaînes suivantes, indiquées dans le tableau ci-dessous :

Le sujet de la conversion en chaînes est décrit plus en détail sur le site officiel dans le paragraphe Conversion en chaîne.

Opérateurs de comparaison

Passons aux opérateurs de comparaison.
Toutes les valeurs fausses renvoient vrai, comme prévu, par rapport à FALSE en utilisant l'opérateur " == ".
Mais vous ne devez pas vous fier ici à la transitivité lorsque vous comparez de fausses constantes de chaîne entre elles.
Voici un tableau complet pour comparer les fausses valeurs (plus désigne les éléments du tableau qui, lorsqu'ils sont comparés à l'aide de l'opérateur " != ", renvoient une valeur vraie :

$undef – une variable à laquelle aucune valeur n'a été attribuée

Quelques conclusions agréables peuvent être tirées du tableau :
1. Si nous savons que nous n'utilisons que des chaînes, nous pouvons alors les comparer en toute sécurité et ne pas craindre que "" (une chaîne vide) soit égal à "0".
2. Les tableaux ne sont jamais égaux à des chaînes, des entiers ou des nombres réels.

Étant donné que les types de fausses constantes sont différents, une paire d'opérateurs === et !== peut être utilisée pour les distinguer.
L'opérateur === renvoie false pour toutes les paires de valeurs fausses.
Renvoie la valeur vraie uniquement pour les arguments dont l’un reçoit la valeur NULL et le second ne reçoit aucune valeur.

Différence entre les variables avec une valeur NULL et les variables non définies

L'opérateur === vous permet de distinguer toutes les fausses valeurs, à l'exception des variables avec une valeur NULL des variables auxquelles aucune valeur n'a été attribuée.

Ces variables peuvent être distinguées à l'aide de la fonction get_défini_vars().

Si vous devez déterminer si une valeur a été affectée à la variable $var, l'extrait de code suivant peut être utilisé pour ce faire :
if (array_key_exists("var", get_defined_vars())) ( echo "var est défini"; // $var est affecté à NULL ) else ( echo "var n'est PAS défini"; // $var n'est pas défini ou n'est pas défini($ var) a été appelé)

conclusions

Vous devez toujours vous rappeler qu'en PHP, deux fausses valeurs peuvent ne pas être égales et que des variables qui semblent différentes à première vue peuvent s'avérer identiques lorsqu'on les compare. Pour éviter de telles surprises, vous pouvez utiliser les opérateurs === et !==.

Lorsque vous travaillez avec des tableaux, pour éviter les surprises, vous pouvez écrire une fonction pour convertir les valeurs en différents index garantis. Après cela, les éléments du tableau ne sont accessibles qu'en utilisant celui-ci. Cela peut ralentir le programme, mais cela permettra d'éviter des surprises.

Les tests ont été effectués sur PHP 5.3.1.

Liens supplémentaires

1. Tableaux de comparaison des types PHP.
2. Chaînes MySQL nulles et vides dans le contexte de PHP.

Balises : ajouter des balises

En PHP, les valeurs FALSE et NULL et leurs valeurs associées sont différentes de ce qu'elles sont habituellement dans d'autres langages et ont leurs propres caractéristiques non évidentes.
FALSE et NULL et leurs valeurs associées sont différents de la façon dont ils sont habituellement utilisés dans d'autres langages et ont leurs propres particularités.
L'article traite de ces fonctionnalités.

Pour les débutants, cela peut être utile pour avoir une vue d’ensemble ; pour les lecteurs expérimentés, cela peut être utile pour se rafraîchir la mémoire si une nuance leur a échappé.

FAUX dans les instructions If
  • Selon la documentation PHP, les valeurs suivantes sont FALSE après conversion en booléen :
  • la valeur booléenne elle-même est FAUX
  • une chaîne vide ("") et la chaîne "0".
  • tableau vide (tableau) – tableau().
  • un objet avec zéro variable membre (PHP 4 uniquement, non couvert dans cet article)
  • valeur NULL spéciale (y compris les variables non définies)
Objets SimpleXML (non abordés dans cet article)
Cela signifie que si de telles valeurs sont transmises à la condition :
si (…) fait écho à « 1 » ; sinon, faites écho à « 0 » ;

alors la chaîne "0" sera imprimée.

Si la valeur de la variable n'est pas définie (non définie), un avertissement peut également être émis. Rappelons que l'avertissement dans la condition peut être supprimé en écrivant @ avant la variable.

Par exemple:
Si (@$undefVar) ( …)

Mais vous ne devez utiliser @ que dans des cas extrêmes, lorsque vous avez bien réfléchi et qu'il n'existe pas d'autres options appropriées. Voir la fonction isset().

is_null() renvoie TRUE uniquement pour les variables auxquelles aucune valeur n'est affectée ou auxquelles la valeur NULL est affectée.
isset() renvoie des valeurs booléennes individuelles par rapport à is_null() .
Si aucune valeur n'est attribuée à la variable, alors is_null() émet également un avertissement "Variable non définie", contrairement à isset(), qui n'émet aucun avertissement.
Rappelons que pour supprimer la valeur d'une variable, vous pouvez utiliser la fonction unset(). Vous pouvez également attribuer la valeur NULL à cet effet pour éviter les avertissements du compilateur lors de la tentative de lecture de la valeur d'une variable.

Veuillez noter que, contrairement aux variables, pour travailler avec des constantes, vous devez utiliser la construction définie().

Représentation sous forme de chaîne

Regardons la représentation sous forme de chaîne des fausses constantes.
Par exemple, la concaténation convertit les valeurs dans les chaînes suivantes, indiquées dans le tableau ci-dessous :

Le sujet de la conversion en chaînes est décrit plus en détail sur le site officiel dans le paragraphe Conversion en chaîne.

Opérateurs de comparaison

Passons aux opérateurs de comparaison.
Toutes les valeurs fausses renvoient vrai, comme prévu, par rapport à FALSE en utilisant l'opérateur " == ".
Mais vous ne devez pas vous fier ici à la transitivité lorsque vous comparez de fausses constantes de chaîne entre elles.
Voici un tableau complet pour comparer les fausses valeurs (plus désigne les éléments du tableau qui, lorsqu'ils sont comparés à l'aide de l'opérateur " != ", renvoient une valeur vraie :

$undef – une variable à laquelle aucune valeur n'a été attribuée

Quelques conclusions agréables peuvent être tirées du tableau :
1. Si nous savons que nous n'utilisons que des chaînes, nous pouvons alors les comparer en toute sécurité et ne pas craindre que "" (une chaîne vide) soit égal à "0".
2. Les tableaux ne sont jamais égaux à des chaînes, des entiers ou des nombres réels.

Étant donné que les types de fausses constantes sont différents, une paire d'opérateurs === et !== peut être utilisée pour les distinguer.
L'opérateur === renvoie false pour toutes les paires de valeurs fausses.
Renvoie la valeur vraie uniquement pour les arguments dont l’un reçoit la valeur NULL et le second ne reçoit aucune valeur.

Différence entre les variables avec une valeur NULL et les variables non définies

L'opérateur === vous permet de distinguer toutes les fausses valeurs, à l'exception des variables avec une valeur NULL des variables auxquelles aucune valeur n'a été attribuée.

Ces variables peuvent être distinguées à l'aide de la fonction get_défini_vars().

Si vous devez déterminer si une valeur a été affectée à la variable $var, l'extrait de code suivant peut être utilisé pour ce faire :
if (array_key_exists("var", get_defined_vars())) ( echo "var est défini"; // $var est affecté à NULL ) else ( echo "var n'est PAS défini"; // $var n'est pas défini ou n'est pas défini($ var) a été appelé)

conclusions

Vous devez toujours vous rappeler qu'en PHP, deux fausses valeurs peuvent ne pas être égales et que des variables qui semblent différentes à première vue peuvent s'avérer identiques lorsqu'on les compare. Pour éviter de telles surprises, vous pouvez utiliser les opérateurs === et !==.

Lorsque vous travaillez avec des tableaux, pour éviter les surprises, vous pouvez écrire une fonction pour convertir les valeurs en différents index garantis. Après cela, les éléments du tableau ne sont accessibles qu'en utilisant celui-ci. Cela peut ralentir le programme, mais cela permettra d'éviter des surprises.

Si, lorsque vous travaillez avec des chaînes, vous devez vérifier si une chaîne est vide, les programmeurs débutants utilisent généralement la fonction strlen(). Cette fonction est assez rapide car elle n'effectue aucun calcul, mais renvoie simplement la valeur déjà connue de la longueur de la chaîne, disponible dans zval (PHP utilise une structure C pour stocker les variables). Mais quand même, parce que strlen()- c'est une fonction, elle est un peu lente car elle nécessite plusieurs actions lorsqu'elle est appelée, comme la conversion en minuscules et la recherche dans la table de hachage. Dans certains cas, vous pouvez augmenter la vitesse d'exécution de votre code en utilisant vide()..., mais aussi vide() Vous pouvez toujours l'optimiser un peu.

Prenons un exemple Par exemple vérifier le chemin de l'image, la fonction vérifie si le chemin est vide, puis remplacez-le par un autre chemin, par exemple « images/noimage.jpg ».

Toute la tâche se résume donc à vérifier si une variable de type chaîne est vide. Essayons 4 façons :

  • si(strlen($img_path)>0)
  • si($img_path(0))
  • si (vide ($ img_path))
  • et encore une façon pour la fin.

Et donc nous écrirons dans un premier temps :

Fonction check_image_path($img_path ) ( if (strlen ($img_path ) >0 ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

Effectuons des tests, le temps moyen de test a pris 1.43795800209 seconde.

En y réfléchissant un peu plus... Vous pouvez accéder au premier caractère de la ligne d'un seul coup, plutôt qu'à la ligne entière. Si le premier caractère est là, alors la chaîne n'est pas vide. Le premier caractère de la ligne est numéroté par "0".

Fonction check_image_path($img_path) ( if ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) renvoie $img_path ; )

durée moyenne du test 1.19431300163 sec., 17% du temps joué

Essayons maintenant d'écrire en utilisant empty() :

Fonction check_image_path($img_path) ( if (empty ($img_path) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

durée moyenne du test 1.1341319084 sec., 5% du temps lu à partir de l'exemple précédent

Regardons maintenant l'avant-dernier et dernier exemple ci-dessus. Voyons comment cela peut être combiné. réfléchissez... comment pouvez-vous optimiser autrement ?

Fonction check_image_path($img_path) ( if (empty ($img_path ( 0 ) ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

durée moyenne du test 1.07465314865 sec., et encore une fois nous avons gagné 5% du temps...

Comment ça marche et pourquoi est-ce plus rapide ? Et ici $img_path(0) renvoie le premier caractère... puis la fonction vide() vérifie une chaîne vide... la différence avec l'exemple précédent est qu'un seul caractère est transmis à la fonction, et non la chaîne entière. Ainsi, du premier exemple au dernier, nous avons gagné 25% temps.



2024 wisemotors.ru. Comment ça fonctionne. Fer. Exploitation minière. Crypto-monnaie.