2009-09-16 8 views
-4

Le natif empty() dans PHP échouera si la chaîne est "0" ou quelque chose comme ça.Comment implémenter is_empty() en PHP?

Alors comment implémenter la fonction is_empty() exacte en PHP?

+0

que voulez-vous dire par échouer? – RageZ

+6

La fonction n'échoue pas, elle fonctionne selon ses spécifications. – Bombe

+0

Que comprenez-vous exactement par une valeur vide? Quelles valeurs sont vides selon vous? – Gumbo

Répondre

4

essayez ceci:

function is_empty(&$val) { 
    return empty($val) && $val !== "0"; 
} 

&$val est nécessaire, afin de ne pas d'avertissement sur les variables non définies.

si vous voulez seulement vérifier si une variable est définie (quelle que soit sa valeur), vous devez utiliser PHP de isset

+1

Vous avez besoin d'une vérification de type stricte, n'est-ce pas? Il devrait être && $ val! == "0"; Sinon PHP peut convertir false et "" à 0. –

+0

bonne prise là! – knittl

0

Assez simple, vérifiez le cas d'erreur décrit ci-dessus. Si vous y courez, renvoyez le résultat que vous voulez. Sinon, appelez empty() et renvoyez ce résultat.

1

Vous pouvez utiliser isset si vous essayez de vérifier si cette variable est définie.

1

Consultez le type comparison table dans le manuel PHP pour le comportement exact de empty(), isset(), is_null() etc. Vous trouverez probablement ce que vous cherchez là-bas.

0

J'ai toujours ajouter à mon code de base

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

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

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

1

Ma solution pour celui-ci:

/** 
* Checks if a scalar value is FALSE, without content or only full of 
* whitespaces. 
* For non-scalar values will evaluate if value is empty(). 
* 
* @param mixed $v to test 
* @return bool if $v is blank 
*/ 
function is_blank (&$v) 
{ 
    return !isset($v) || (is_scalar($v) ? (trim($v) === '') : empty($v)); 
} 

Voir http://3960.org/sandbox/empty.php pour son comportement. Essentiellement, toutes les valeurs seront retournées comme avec empty(), mais pour les chaînes et les nombres évaluant à '0'.

Questions connexes