count()
Compte- t-il vraiment tous les éléments d'un tableau PHP, ou cette valeur est-elle mise en cache quelque part et est simplement récupérée?
php
arrays
performance
Dexter
la source
la source
Réponses:
Eh bien, nous pouvons regarder la source:
PHP_FUNCTION(count)
appellephp_count_recursive()
, qui à son tour appellezend_hash_num_elements()
un tableau non récursif, qui est implémenté de cette façon:Donc vous pouvez voir, c'est
O(1)
pour$mode = COUNT_NORMAL
.la source
IS_CONSISTENT(ht)
Mais que fait -on?En PHP 5+, la longueur est stockée dans le tableau donc le comptage n'est pas fait à chaque fois.
EDIT: Vous pourriez également trouver cette analyse intéressante: PHP Count Performance . Bien que la longueur du tableau soit maintenue par le tableau, il semble toujours qu'il soit plus rapide de le conserver si vous prévoyez d'appeler
count()
plusieurs fois.la source
PHP stocke la taille d'un tableau en interne, mais vous faites toujours un appel de fonction quand ce qui est plus lent que de ne pas en faire un, vous voudrez donc stocker le résultat dans une variable si vous faites quelque chose comme l'utiliser dans un boucle:
Par exemple,
De plus, vous ne pouvez pas toujours être sûr qu'il
count
est appelé sur un tableau. S'il est appelé sur un objet implémentantCountable
par exemple, lacount
méthode de cet objet sera appelée.la source
the count method of that object will be called
, pouvez-vous s'il vous plaît expliquer ceci un peuCountable
interface, alors l'appelcount($object)
est la même chose que l'appel$object->count()
. Voir 3v4l.org/oYSSC par exemple.you're still making a function call when which is slower than not making one
Cette déclaration peut être fausse. Si vous effectuez une traversée manuelle, c'est l'O(n)
opération. Mais si vous souhaitez simplement récupérer une valeur pré-calculée, l'opération l'estO(1)
.