¿ count()
Realmente cuenta todos los elementos de una matriz PHP, o este valor se almacena en caché en algún lugar y simplemente se recupera?
php
arrays
performance
Diestro
fuente
fuente
Respuestas:
Bueno, podemos mirar la fuente:
PHP_FUNCTION(count)
llamadasphp_count_recursive()
, que a su vez requierezend_hash_num_elements()
una matriz no recursiva, que se implementa de esta manera:Entonces puedes ver, es
O(1)
para$mode = COUNT_NORMAL
.fuente
IS_CONSISTENT(ht)
Pero qué hace ?En PHP 5+, la longitud se almacena en la matriz, por lo que el conteo no se realiza cada vez.
EDITAR: También puede encontrar este análisis interesante: PHP Count Performance . Aunque la longitud de la matriz se mantiene mediante la matriz, todavía parece que es más rápido mantenerla si va a llamar
count()
muchas veces.fuente
PHP almacena el tamaño de una matriz internamente, pero aún está haciendo una llamada de función cuando es más lento que no hacer una, por lo que querrá almacenar el resultado en una variable si está haciendo algo como usarlo en un lazo:
Por ejemplo,
Además, no siempre puede estar seguro de que
count
se está llamando en una matriz. Si se llama a un objeto que se implementa,Countable
por ejemplo,count
se llamará al método de ese objeto.fuente
the count method of that object will be called
, ¿podría explicar esto un pocoCountable
interfaz, entonces llamarcount($object)
es lo mismo que llamar$object->count()
. Consulte 3v4l.org/oYSSC, por ejemplo.you're still making a function call when which is slower than not making one
Esta afirmación puede estar equivocada. Si está haciendo un recorrido manual, eso esO(n)
operación. Pero si solo desea recuperar un valor precalculado, la operación esO(1)
.