Cette question sur ' Comment savoir si un tableau PHP est vide ' m'a fait réfléchir à cette question
Y a-t-il une raison count
à utiliser au lieu de empty
déterminer si un tableau est vide ou non?
Ma pensée personnelle serait si les 2 sont équivalents pour le cas des tableaux vides que vous devriez utiliser empty
car cela donne une réponse booléenne à une question booléenne. D'après la question liée ci-dessus, il semble que ce count($var) == 0
soit la méthode populaire. Pour moi, bien que techniquement correct, cela n'a aucun sens. Ex : Q: $ var, êtes-vous vide? R: 7 . Hmmm ...
Y a-t-il une raison pour laquelle je devrais utiliser à la count == 0
place ou juste une question de goût personnel?
Comme indiqué par d'autres dans les commentaires pour une réponse maintenant supprimée, count
aura des impacts sur les performances pour les grands tableaux car il devra compter tous les éléments, alors qu'il empty
peut s'arrêter dès qu'il sait qu'il n'est pas vide. Donc, s'ils donnent les mêmes résultats dans ce cas, mais count
sont potentiellement inefficaces, pourquoi utiliserions-nous jamais count($var) == 0
?
false
en PHP - pas besoin deempty()
oucount()
.if (!$myArray) { echo "array is empty"; }
sandbox.onlinephpfunctions.com/code/…empty()
.Réponses:
J'utilise généralement
empty
. Je ne sais pas pourquoi les gens utiliseraient vraiment count - Si le tableau est grand, alors count prend plus de temps / a plus de frais généraux. Si vous avez simplement besoin de savoir si le tableau est vide ou non, utilisez vide.la source
O(1)
, puisque PHP stocke le nombre d'éléments en interne. Découvrez cette réponse stackoverflow.com/a/5835419/592454J'étais curieux de voir lequel était en fait le plus rapide, alors j'ai créé un script simple pour comparer ces fonctions.
Depuis que je le faisais, j'ai également essayé de vérifier les performances en effectuant des opérations qui seraient normalement associées à count () / empty ()
En utilisant PHP 5.4.39:
Utilisation de HipHop VM 3.6.1 (dbg)
Conclusions si vous utilisez PHP:
empty () est beaucoup plus rapide que count () dans les deux scénarios, avec un tableau vide et rempli
count () effectue la même chose avec un tableau plein ou vide.
Faire un simple IF ou simplement une opération booléenne est la même chose.
IF / ELSE est très légèrement plus efficace que (?:). À moins que vous ne fassiez des milliards d'itérations avec des expressions au milieu, c'est complètement insignifiant.
Conclusions si vous utilisez HHVM:
empty () est un tout petit peu plus rapide que count () mais de manière insignifiante.
[Le reste est le même qu'en PHP]
En conclusion, si vous avez juste besoin de savoir si le tableau est vide, utilisez toujours empty ();
Ce n'était qu'un curieux test effectué simplement sans prendre en compte beaucoup de choses. Il s'agit simplement d'une preuve de concept et peut ne pas refléter les opérations de production.
la source
if($x){
c'est plus rapide queif(empty($x)){
(ne fonctionne que si vous savez que cela$x
a été déclaré).count
etempty
appelle dans l'instruction if. Ensuite, il vient leempty
et dure lecount
. Mais comparé au vôtre en cas nu, le vide est dix fois plus rapide! Test de tableau simple: 0.104662, vide: 0.177659, compte: 1.175125 sur PHP 5.6 sinon votre code donne le même résultat sur cette version aussi comme celui que vous avez mentionné. Ce sont juste de faux résultats.Je pense que ce n'est qu'une préférence personnelle. Certains pourraient dire que
empty
c'est plus rapide (par exemple http://jamessocol.com/projects/count_vs_empty.php ) tandis que d'autres pourraient dire quecount
c'est mieux car il a été conçu à l'origine pour les tableaux.empty
est plus général et peut être appliqué à d'autres types.php.net donne cependant l'avertissement suivant
count
:En d'autres termes, si la variable n'est pas définie, vous recevrez un avis de PHP indiquant qu'elle n'est pas définie. Par conséquent, avant d'utiliser
count
, il serait préférable de vérifier la variable avecisset
. Ce n'est pas nécessaire avecempty
.la source
count
est qu'il a été initialement conçu pour les tableaux ... mais les objets peuvent être implémentésCountable
, et vous pouvez passer des valeurs scalaires àcount()
et obtenir un résultat valide.isset()
point. Si vous vous inquiétez des avis en PHP, vous devriez déjà avoir déclaré votre tableau. Si vous laissez PHP déclarer dynamiquement votre tableau, vous recevrez également une notification à ce stade. Je pense que le vrai point de l'avertissement sur php.net est que vous ne devriez pas utilisercount
pour déterminer si un tableau a été déclaré ou non car il donne le même résultat qu'un tableau vide.Il y a, lorsque vous devez faire quelque chose sur un tableau non vide en sachant sa taille:
Mais je ne recommanderais pas d'utiliser count, à moins que vous ne soyez sûr à 100% que ce que vous comptez est un tableau. Dernièrement, j'ai débogué du code, où la fonction d'erreur retournait
FALSE
au lieu d'un tableau vide, et ce que j'ai découvert était:production:
Donc, depuis lors, j'utilise
empty
ouif(array() === $array)
pour être sûr que j'ai un tableau vide.la source
count()
semble mieux fonctionner avec les interfaces de type tableau qui implémententArrayAccess/Countable
.empty()
renvoie true pour ces types d'objets même s'ils n'ont aucun élément. En règle générale, ces classes implémenteront l'Countable
interface, donc si la question est "Cette collection contient-elle des éléments?" sans faire d'hypothèse sur la mise en œuvre, alorscount()
est une meilleure option.la source
empty
renvoie faux pour ces types d'objets même s'ils n'ont aucun élément"?count
serait une solution plus flexible et extensible si jamais il était logique que votre code accepte une collection implémentée de manière "commune" ... IMO qui pourrait être le seul critère pertinent pour définir si vous utilisezcount
ou d'autres moyens ...count()
7.2 est qu'il ne peut plus accepter de variables vides.Vous pouvez également convertir la variable en booléen (implicitement ou explicitement):
Cette méthode génère un
E_NOTICE
si la variable n'est pas définie, de la même manière quecount()
.Pour plus d'informations, consultez la page du manuel PHP sur les comparaisons de types .
la source
empty()
si vous essayez explicitement d'éviter de déclencher un E_NOTICE (ce qui est généralement une mauvaise idée, IMO). L'utilisation flagrante de empty conduira à un code bogué.Ma préférence personnelle est plus pour le codage de l'élégance (par rapport à mon cas d'utilisation spécifique). Je suis d'accord avec Dan McG dans la mesure où count () ne répond pas avec le type de données correct (dans ce cas booléen) pour le test en question, ce qui oblige le développeur à écrire plus de code pour remplir une instruction `` if ''.
Que cela ait un impact significatif sur les performances n'est discutable que pour les baies extrêmement grandes (pour lesquelles vous n'aurez probablement pas assez de mémoire pour de toute façon dans la plupart des configurations).
Particulièrement en ce qui concerne le tableau $ _POST de PHP, il semble beaucoup plus "logique" à mon avis d'écrire / voir:
la source
J'espère que cela pourrait aider quelqu'un même s'il a déjà été répondu (et débattu de quoi). Dans mon propre scénario, je sais que tous mes tableaux ont tous 7 éléments (les vérifications ont été effectuées plus tôt dans mon code) et j'effectue un
array_diff
qui, bien sûr, renvoie un tableau de zéro lorsqu'il est égal.J'ai eu 34 secondes pour
count
et 17 secondes pourempty
. Les deux me donnent les mêmes calculs donc mon code est toujours correct.Cependant, vous pouvez également essayer le
==
ou===
comme en PHP - Vérifiez si deux tableaux sont égaux . Le mieux que je dirais est d'essayercount
vsempty
vs== empty array
, puis de voir ce qui vous donne les meilleures performances. Dans mon cas,count
c'était le plus lent, donc j'utiliseempty
maintenant ... vérifieraserialize
ensuitela source
Il n'y a pas de raison forte à préférer
count($myArray) == 0
plusempty($myArray)
. Ils ont une sémantique identique. Certains pourraient trouver l'un plus lisible que l'autre. L'un peut fonctionner légèrement mieux que l'autre, mais il est peu probable que ce soit un facteur significatif dans la grande majorité des applications php. À toutes fins pratiques, le choix est une question de goût.la source
count
lorsque vous avez besoin de compter, à utiliserempty
lorsque vous devez vérifier si la collection est vide. Bien sûr, il existe des cas extrêmes comme des chaînes ou des valeurs nulles, mais le programmeur doit réfléchir à son code. Vous pouvez être en désaccord, vous êtes autorisé à le faire.Parfois, l'utilisation de vide est un must. Par exemple ce code:
Si vous exécutez ce code comme ceci: http://phpfiddle.org/main/code/g9x-uwi
Vous obtenez cette sortie:
Donc, si vous
count
la sortie glob vide, vous obtenez une mauvaise sortie. Vous devriez vérifier le vide.De la documentation de glob :
Vérifiez également cette question: Pourquoi compter (faux) retour 1?
la source
Puisqu'une variable analysée comme négative reviendrait
int(1)
aveccount()
Je préfère
($array === [] || !$array)
tester un tableau vide.Oui, nous devrions nous attendre à un tableau vide, mais nous ne devrions pas nous attendre à une bonne implémentation sur des fonctions sans types de retour forcés.
Exemples avec
count()
la source
J'ai refait mon esprit les gars, merci.
Ok, il n'y a aucune différence entre l'utilisation de
empty
etcount
. Techniquement,count
devrait être utilisé pour les tableaux etempty
pourrait être utilisé pour les tableaux ainsi que les chaînes. Donc, dans la plupart des cas, ils sont interchangeables et si vous voyez la documentation php, vous verrez la liste des suggestionscount
si vous êtes àempty
et vice versa.la source