php: « 0 » en tant que chaîne vide ()
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.
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 seulement vide (). Voir la rel="noreferrer"> manuel. Vous pouvez le faire si:
if ($var !== '0' && empty($var)) {
echo "$var is empty and is not string '0'";
}
Fondamentalement, vider () fait la même chose que:
if (!$var) ...
Mais ne déclenche pas un avis lorsque la variable PHP n'est pas réglé.
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 ()
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).
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';
}