2016-02-01 10 views
23

Wenn Sie eine typische for Schleife verwenden, schlägt PHPStorm vor, es für bessere Leistung zu ändern. Ich verstehe den Vorschlag nicht wirklich. Wie sollte ich es ändern?Verbessern Sie PHP 'for' Schleife

PHPStorm suggestion

+2

Was ist der PhpStorm Vorschlag klicken Sie auf, wenn Sie mehr ** **:

Dies kann auf zwei Arten geschehen? Ich bin neugierig, warum PHPStorm es vorschlägt. – jedema

+0

gibt es nur 'Analysen für Schleifen und meldet die Verwendung blablabla' :) – simPod

+1

' foreach' und vergessen – Kzqai

Antwort

55

for($i = 0; $i <= count($data); $i++){}

In diesem Beispiel muss es für jede Iteration erneut count($data) sein.

for($i = 0, $iMax = count($data); $i <= $iMax; $i++){}

In diesem Beispiel braucht es nur zu count($data) einmal.

Das ist der Unterschied.

+1

Zum Vergleich siehe [diesen Beitrag] (http://Stackoverflow.com/a/12847555/2865814) –

+2

Vermutlich geht dies davon aus, dass ' $ data' ändert die Länge innerhalb der Schleife nicht, oder die zwei wären anders. – abligh

+4

@abligh Wenn '$ data' die Länge innerhalb der for-Schleife ändert, sollten Sie wahrscheinlich überhaupt keine for-Schleife verwenden. Ich mag jedoch voreingenommen sein, ich denke nicht, dass Sie jemals eine For-Schleife verwenden sollten. – Odalrick

14

Wenn Sie die count() in Ihrem for Schleife ausführen, dann ist es jede Iteration ausgeführt, und Aufruf der Funktion ist ein Performance-Overhead.

Wenn Sie stattdessen count() vor dem for Schleife aufrufen und das Ergebnis einer Variablen zuweisen, vergleichen, dann gegen die Variable in der for Schleife, Sie haver nicht den Overhead-Funktionsaufruf, so dass es schneller

12

Durch die Schleife in der Art, die Sie tun, muss jede Iteration ausgewertet werden. Wenn Sie viele Elemente in der Liste haben, kann es relativ zeitaufwendig sein, diese Elemente zu zählen, und es muss jedes Mal ausgeführt werden.

Der Hinweis, es ist Tauchen Sie sind, eine Variable auf den Wert von count ($ data) am Anfang und dann verwenden Sie diese Variable als das Schleifenlimit, wenn es nur einmal ausgewertet wird.

$loopMax = count($data); 
for ($i = 0; $i <= $loopMax; $i++) { 
    // Your code here 
} 

Oder

for ($i=0, $loopMax = count($data); $i <= $loopMax; $i++) { 
    // your code here 
} 
+0

Die oberste wird offensichtlich bevorzugt, wenn Sie aus irgendeinem Grund mehrere Male iterieren. Die Unterseite ist in anderen Zeiten bevorzugt, weil Sie immer danach streben sollten, den Umfang Ihrer Variablen zu begrenzen. – corsiKa

+0

Die Verwendung der obersten ist nicht beschränkt auf, wenn Sie es mehrmals durchlaufen werden, es wäre auch nützlich, wenn die Anwendung, sagen wir, eine Notwendigkeit hat, die Anzahl auszugeben; vielleicht für eine Paginierung oder ähnliches. Aber ja, der Umfang der Variablen sollte auf den benötigten Bereich beschränkt werden. – gabe3886