111 votes

La vérification de tableaux vides: le comte vs vide

Cette question sur"Comment savoir si un tableau PHP est vide' m'a fait penser à cette question

Est-il une raison que count doit être utilisé à la place de empty au moment de déterminer si un tableau est vide ou pas?

Ma pensée personnelle serait le cas si les 2 sont équivalents pour le cas de tableaux vides, vous devez utiliser empty , car il donne un booléen réponse à un booléen question. À partir de la question ci-dessus, il semble qu' count($var) == 0 est la méthode populaire. Pour moi, bien que techniquement correct, n'a pas de sens. E. g. Q: $var, êtes vous vide? A: 7. Hmmm...

Est-il une raison que je devrais utiliser count == 0 plutôt ou tout simplement une question de goût personnel?

Comme souligné par d'autres dans les commentaires pour maintenant supprimé réponse, count aura un impact sur les performances pour les grands tableaux, car il devra compter tous les éléments, tandis que l' empty pouvez arrêter dès qu'il sait qu'il n'est pas vide. Donc, si ils donnent les mêmes résultats dans le cas présent, mais count est potentiellement inefficace, pourquoi n'aurions-nous jamais les utiliser, count($var) == 0?

118voto

prodigitalson Points 38549

Je l'utilise généralement empty. Je ne sais pas pourquoi les gens utiliseraient comptent vraiment - Si le tableau est grand alors le comte prend plus de temps a plus de frais généraux. Si vous avez simplement besoin de savoir si le tableau est vide, puis utilisez vide.

18voto

Je pense que c'est juste une préférence personnelle. Certaines personnes pourraient dire empty est plus rapide (par ex. http://jamessocol.com/projects/count_vs_empty.php), tandis que d'autres pourraient dire count est mieux depuis qu'il a été à l'origine fait pour les tableaux. empty est plus générale et peut être appliquée à d'autres types.

php.net donne l'avertissement suivant pour count bien que :

count() peut retourner 0 pour une variable qui n'est pas défini, mais il peut aussi retourner la valeur 0 pour une variable a été initialisée avec un tableau vide. Utiliser la fonction isset() pour tester si une variable est définie.

En d'autres termes, si la variable n'est pas définie, vous recevrez un avis de PHP en disant que c'est pas défini. Par conséquent, avant d'utiliser count, il serait préférable de vérifier la variable isset. Ce n'est pas nécessaire avec empty.

12voto

dev-null-dweller Points 19874

Est-il une raison que le comte doit être utilisé au lieu de vide au moment de déterminer si un tableau est vide ou pas?

Il est, quand vous avez besoin de faire quelque chose sur la non-vide en sachant qu'il est de taille:

if( 0 < ( $cnt = count($array) ) )
{
 echo "Your array size is: $cnt";
}
else
 echo "Too bad, your array is empty :(";

Mais je ne recommanderais pas à l'aide de compter, sauf si vous êtes sûr à 100%, que ce que vous êtes de comptage est un tableau. Dernièrement, j'ai été mise au point du code, où sur la fonction de l'erreur de retourner en FALSE au lieu de tableau vide, et j'ai découvert:

var_dump(count(FALSE));

sortie:

int 1

Donc, depuis lors, je suis en utilisant empty ou if(array() === $array) pour être sûr que j'ai de tableau qui est vide.

5voto

todofixthis Points 4206

Alternativement, vous pouvez lancer la variable booléenne (implicitement ou explicitement):

if( $value )
{
  // array is not empty
}

if( (bool) $value )
{
  // array is still not empty
}

Cette méthode génère un E_NOTICE si la variable n'est pas définie, de même pour count().

Pour plus d'informations, voir le Manuel PHP d'une page sur le type de comparaisons.

3voto

Simon Points 497

Ma préférence personnelle est plus pour le codage de l'élégance (par rapport à mon cas d'utilisation). Je suis d'accord avec Dan McG en ce qui count() n'est pas de répondre avec le bon type de données (dans ce cas, boolean) pour le test en question de forcer les développeurs à écrire plus de code pour remplir une déclaration "if".

Si cela a un impact important sur les performances est seulement discutable pour les très grandes matrices (dont vous n'aurez probablement pas assez de mémoire pour l'allocation de toute façon dans la plupart des configurations).

En particulier quand il s'agit de PHP $_POST tableau, il semble beaucoup plus "logique" à mon avis, pour écrire à voir:

if ( !empty ( $_POST ) ) {
    // deal with postdata
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X