Zählt count()
wirklich alle Elemente eines PHP-Arrays oder wird dieser Wert irgendwo zwischengespeichert und nur abgerufen?
php
arrays
performance
Dexter
quelle
quelle
Antworten:
Nun, wir können uns die Quelle ansehen:
PHP_FUNCTION(count)
Aufrufephp_count_recursive()
, die wiederum einzend_hash_num_elements()
nicht rekursives Array erfordern, das folgendermaßen implementiert wird:Sie sehen also, es ist
O(1)
für$mode = COUNT_NORMAL
.quelle
IS_CONSISTENT(ht)
aber?In PHP 5+ wird die Länge im Array gespeichert, sodass nicht jedes Mal gezählt wird.
BEARBEITEN: Diese Analyse könnte Sie auch interessieren: PHP Count Performance . Obwohl die Länge des Arrays vom Array beibehalten wird, scheint es immer noch schneller zu sein, daran festzuhalten, wenn Sie
count()
mehrmals aufrufen .quelle
PHP speichert die Größe eines Arrays intern, aber Sie führen immer noch einen Funktionsaufruf durch, wenn dieser langsamer ist als nicht. Daher möchten Sie das Ergebnis in einer Variablen speichern, wenn Sie es beispielsweise in einem verwenden Schleife:
Beispielsweise,
Außerdem können Sie nicht immer sicher sein,
count
dass ein Array aufgerufen wird. Wenn es für ein Objekt aufgerufen wird, dasCountable
beispielsweise implementiert wird , wird diecount
Methode dieses Objekts aufgerufen.quelle
the count method of that object will be called
, können Sie dies bitte ein wenig erklärenCountable
Schnittstelle implementiert ,count($object)
ist das Aufrufen dasselbe wie das Aufrufen$object->count()
. Siehe zum Beispiel 3v4l.org/oYSSC .you're still making a function call when which is slower than not making one
Diese Aussage kann falsch sein. Wenn Sie manuell durchlaufen, ist dies eineO(n)
Operation. Wenn Sie jedoch nur einen vorberechneten Wert abrufen möchten, lautet die OperationO(1)
.