Heim Backend-Entwicklung PHP-Tutorial Was ist effizienter, for oder foreach? Warum?

Was ist effizienter, for oder foreach? Warum?

Jun 13, 2020 pm 02:57 PM
for foreach

Der Grund für das Schreiben dieses Artikels liegt hauptsächlich darin, dass ich während des Entwicklungsprozesses plötzlich die folgenden Fragen hatte und mir die Zeit nahm, sie eingehend zu untersuchen, um mein Verständnis von PHP zu vertiefen.

1. Als PHP-Programm werden For- und Foreach-Schleifendurchläufe fast täglich verwendet. Welche dieser beiden Durchlaufmethoden ist also effizienter?

2. Was ist der Grund für hohe Effizienz?

3. Was sind die Grundsätze?

Zunächst müssen wir das erste Problem lösen. Wir können uns die Testergebnisse durch einen einfachen Test ansehen. Der Testcode lautet wie folgt:

for-Schleife Durchlaufmethode:

public function getForTime(){
    $big_Array = range(0,1000000,1);
     /* for循环遍历数组示例 */
    $start_For_Time = $this->microtime_float();
    //$array_Count = count($big_Array);
    for ($i=0;$i<count($big_Array);$i++) {
            $i;
    }
    $end_For_Time = $this->microtime_float();
    $for_Time = $end_For_Time - $start_For_Time;
    echo &#39;for循环遍历耗时:&#39;.$for_Time.&#39;<br>&#39;;
}
Nach dem Login kopieren

Foreach-Schleifendurchlaufmethode:

public function getForeachTime(){
$big_Array = range(0,1000000,1);
 /* foreach循环遍历数组示例 */
    $start_Foreach_Time = $this->microtime_float();
    foreach ($big_Array as $key=>$val) {
            $key;
    }
    $end_Foreach_Time = $this->microtime_float();
    $foreach_Time = $end_Foreach_Time - $start_Foreach_Time;
    echo &#39;foreach循环遍历耗时:&#39;.$foreach_Time;
}
Nach dem Login kopieren

Zeitberechnungsmethode:

/**
 *  时间统计函数
 */
private function microtime_float($time = null)
{
   list($usec, $sec) = explode(&#39; &#39;, $time ? $time : microtime());
   return ((float)$usec + (float)$sec);
}
Nach dem Login kopieren

Sehen Sie sich den Zeitverbrauch der beiden an Methoden

/*
 * 输出结果:第一种情况:先count在for循环遍历耗时:0.028002023696899 秒
 *                         foreach循环遍历耗时:0.003000020980835 秒
 *        第二种情况:在for循环条件中做count遍历耗时:0.095005035400391 秒
 *                            foreach循环遍历耗时:0.0040009021759033 秒
 * */
Nach dem Login kopieren

Aus dem oben Gesagten können wir eindeutig zwei Schlussfolgerungen aus dem Test ziehen:

1、for循环遍历的效率是低于foreach循环遍历
2、for循环在外部做count和在条件中做count相比较,第一种效率更高
Nach dem Login kopieren

Also die zweite Frage: Was ist der Grund für die hohe Effizienz? Bevor wir nach dieser Antwort suchen, besprechen wir zunächst die dritte Frage. Werfen wir einen Blick auf die Prinzipien.

for-Schleife:

Jedes Mal, wenn sie bei $i beginnt, muss jede Schleife bestimmen, ob $i kleiner als count ist, was viel Zeit in Anspruch nimmt

Weniger als fortfahren, sonst Schleife beenden

foreach:

foreach 依赖 IEnumerable.
第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,
以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束.
期间GetList()方法只执行一次.
从上面是分析我们明显可以得出结论:php 的foreach循环效率是大大高于for循环。
Nach dem Login kopieren

ABER: Ist das wirklich so? Manche Leute würden sagen, dass dieses Beispiel bereits offensichtlich ist und die Schlussfolgerung auf den ersten Blick klar ist. Gibt es andere Möglichkeiten?

Ich denke, die Wahrheit ist nicht so einfach. Wenn das wirklich der Fall ist, was bedeutet die for-Schleife?

Wäre es nicht ausreichend, nur foreach zu verwenden, da foreach um ein Vielfaches effizienter ist als for? Persönlich bin ich der Meinung, dass das von mir getestete Beispiel gewisse Einschränkungen aufweist und nicht als absolute Grundlage für die Bewertung der Effizienz der beiden Schleifenmethoden verwendet werden kann.

Für unsere PHPer ist es jedoch besser, bei der normalen Arbeit die Foreach-Schleifendurchquerung zu verwenden. Wenn Sie interessiert sind, können Sie dies nicht tun Studieren Sie es gründlich.

Das Folgende ist die Antwort von Internetnutzern:

Die Bedeutung von for existiert, weil es einige Situationen gibt, in denen foreach schwierig zu implementieren ist. Weitere Informationen finden Sie im Artikel 46 von Effective Java Obwohl Sie PHP verwenden, sind sie im Grunde gleich! Das Buch empfiehlt die Verwendung des foreach-Modus, aber es gibt drei Situationen, in denen er ungeeignet ist: 1. Filtern – Wenn Sie die Sammlung durchlaufen und ausgewählte Elemente entfernen müssen, müssen Sie eine explizite Iteration verwenden und deren Methode zum Entfernen aufrufen. 2. Konvertierung – Wenn Sie eine Liste oder ein Array durchlaufen und einige oder alle Elementwerte ersetzen müssen, benötigen Sie einen Iterator der Liste oder einen Index des Arrays, um diese Werte festzulegen. 3. Parallele Iteration – Wenn Sie mehrere Sammlungen parallel durchlaufen müssen, müssen Sie den Iterator oder die Indexvariable explizit steuern, damit alle Iteratoren oder Indizes gemeinsam vorrücken können. Dann scheinen for und foreach unterschiedliche Daten zu durchlaufen Es gibt verschiedene Leistungsunterschiede, wie z. B. verknüpfte Listen oder Arrays. Darüber habe ich mich in letzter Zeit gewundert.

Verwandte Empfehlungen: „PHP-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist effizienter, for oder foreach? Warum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben 17 Möglichkeiten, den Bluescreen „kernel_security_check_failure' zu beheben Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (Kernel-Check-Fehler) ist eine relativ häufige Art von Stoppcode. Unabhängig vom Grund führt der Bluescreen-Fehler jedoch dazu, dass viele Benutzer diese Seite sorgfältig vorstellen. 17 Lösungen für den Bluescreen „kernel_security_check_failure“ Methode 1: Entfernen Sie alle externen Geräte Wenn ein externes Gerät, das Sie verwenden, nicht mit Ihrer Windows-Version kompatibel ist, kann der Bluescreen-Fehler „Kernelsecuritycheckfailure“ auftreten. Dazu müssen Sie alle externen Geräte trennen, bevor Sie versuchen, Ihren Computer neu zu starten.

Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Apr 27, 2023 pm 03:40 PM

1. Der Unterschied zwischen Iterator und foreach ist der polymorphe Unterschied (die unterste Ebene von foreach ist Iterator ein Schnittstellentyp, und es ist egal, ob for und foreach der Typ bekannt ist). 1. Warum heißt es, dass die unterste Ebene von foreach der von Iterator geschriebene Code ist: 2. Der Unterschied zwischen „remove in foreach“ und „iterator“. im Alibaba Java Development Manual, aber in Fall 1 wird kein Fehler gemeldet, und in Fall 2 wird zuerst ein Fehler gemeldet (java. util.ConcurrentModificationException).

So bestimmen Sie die Anzahl der foreach-Schleifen in PHP So bestimmen Sie die Anzahl der foreach-Schleifen in PHP Jul 10, 2023 pm 02:18 PM

​Die Schritte für PHP, um die Nummer der foreach-Schleife zu bestimmen: 1. Erstellen Sie ein Array von „$fruits“; 2. Erstellen Sie eine Zählervariable „$counter“ mit einem Anfangswert von 0. 3. Verwenden Sie „foreach“, um eine Schleife durchzuführen durch das Array und Erhöhen Sie den Wert der Zählervariablen im Schleifenkörper und geben Sie dann jedes Element und seinen Index aus. 4. Geben Sie den Wert der Zählervariablen außerhalb der „foreach“-Schleife aus, um zu bestätigen, welches Element die Schleife erreicht.

PHP gibt ein Array mit umgedrehten Schlüsseln zurück PHP gibt ein Array mit umgedrehten Schlüsseln zurück Mar 21, 2024 pm 02:10 PM

In diesem Artikel wird ausführlich erläutert, wie PHP nach dem Umdrehen eines Schlüsselwerts ein Array zurückgibt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. PHP-Schlüsselwert-Flip Der Array-Schlüsselwert-Flip ist eine Operation für ein Array, bei der die Schlüssel und Werte im Array ausgetauscht werden, um ein neues Array mit dem ursprünglichen Schlüssel als Wert und dem ursprünglichen Wert als Schlüssel zu generieren. Implementierungsmethode In PHP können Sie das Schlüsselwert-Umdrehen eines Arrays mit den folgenden Methoden durchführen: array_flip()-Funktion: Die array_flip()-Funktion wird speziell für Schlüsselwert-Umdrehungsvorgänge verwendet. Es erhält ein Array als Argument und gibt ein neues Array mit vertauschten Schlüsseln und Werten zurück. $original_array=[

Wie deinstalliere ich Skype for Business unter Win10? So deinstallieren Sie Skype vollständig auf Ihrem Computer Wie deinstalliere ich Skype for Business unter Win10? So deinstallieren Sie Skype vollständig auf Ihrem Computer Feb 13, 2024 pm 12:30 PM

Kann Win10 Skype deinstalliert werden? Diese Frage möchten viele Benutzer wissen, da viele Benutzer feststellen, dass diese Anwendung im Standardprogramm auf ihren Computern enthalten ist, und sie befürchten, dass das Löschen den Betrieb des Systems beeinträchtigt Diese Website hilft Benutzern. Schauen wir uns genauer an, wie Skype for Business unter Win10 deinstalliert wird. So deinstallieren Sie Skype for Business unter Win10 1. Klicken Sie auf dem Computerdesktop auf das Windows-Symbol und dann zum Aufrufen auf das Einstellungssymbol. 2. Klicken Sie auf „Übernehmen“. 3. Geben Sie „Skype“ in das Suchfeld ein und klicken Sie, um das gefundene Ergebnis auszuwählen. 4. Klicken Sie auf „Deinstallieren“. 5

Wie man for verwendet, um die Fakultät von n in JavaScript zu finden Wie man for verwendet, um die Fakultät von n in JavaScript zu finden Dec 08, 2021 pm 06:04 PM

So verwenden Sie for, um n Fakultäten zu finden: 1. Verwenden Sie die Anweisung „for (var i=1;i<=n;i++){}“, um den Schleifendurchlaufbereich auf „1~n“ zu steuern. 2. In der Schleife Körper, verwenden Sie „cj *=i“. Multiplizieren Sie die Zahlen von 1 bis n und weisen Sie das Produkt der Variablen cj 3 zu. Nach dem Ende der Schleife ist der Wert der Variablen cj die Fakultät von n und wird dann ausgegeben.

PHP gibt das aktuelle Element in einem Array zurück PHP gibt das aktuelle Element in einem Array zurück Mar 21, 2024 pm 12:36 PM

In diesem Artikel wird das aktuelle Element im von PHP zurückgegebenen Array ausführlich erläutert. Der Herausgeber hält es für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. Das aktuelle Element in einem PHP-Array abrufen PHP bietet eine Vielzahl von Methoden für den Zugriff auf und die Bearbeitung von Arrays, einschließlich des Abrufens des aktuellen Elements in einem Array. Im Folgenden werden einige häufig verwendete Techniken vorgestellt: 1. Funktion current() Die Funktion current() gibt das Element zurück, auf das der interne Zeiger des Arrays aktuell zeigt. Der Zeiger zeigt zunächst auf das erste Element des Arrays. Verwenden Sie die folgende Syntax: $currentElement=current($array);2.key() Funktion Die Funktion key() gibt das Element zurück, auf das der interne Zeiger des Arrays aktuell zeigt

Was ist der Unterschied zwischen foreach und for-Schleife? Was ist der Unterschied zwischen foreach und for-Schleife? Jan 05, 2023 pm 04:26 PM

Unterschiede: 1. for durchläuft jedes Datenelement über den Index, während forEach die Datenelemente des Arrays über das zugrunde liegende JS-Programm durchläuft. 2. for kann die Ausführung der Schleife über das Schlüsselwort break beenden, forEach jedoch nicht . for kann die Ausführung der Schleife steuern, indem es den Wert der Schleifenvariablen steuert, forEach jedoch nicht. 4. for kann Schleifenvariablen außerhalb der Schleife aufrufen, forEach kann jedoch keine Schleifenvariablen außerhalb der Schleife aufrufen ist höher als forEach.

See all articles