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.
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é :)
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.
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.
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)
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 ()
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 ()
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) .
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");
}
}
}
empty()
renverra true
. Consultez la doc - http://php.net/empty .
Je suggère d'utiliser une fonction différente pour correspondre à vos spécifications.
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.
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');
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.
$var = '0';
// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
echo '$var is empty or the string "0"';
}
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.
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.
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
};