Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen for- und foreach-Schleifenstrukturen?

Was ist der Unterschied zwischen for- und foreach-Schleifenstrukturen?

伊谢尔伦
伊谢尔伦Original
2017-06-22 15:29:152829Durchsuche

Das Durchlaufen eines Arrays ist die häufigste Methode in der Programmierung. Hier werden zwei Methoden besprochen: for und foreach. Es gibt zu viele Szenarien für die Verwendung dieser beiden Methoden zum Durchlaufen. Hier diskutieren wir nur die folgenden zwei Arrays als Beispiele. Das sogenannte „Sehen des Leoparden durch die Röhre“ kann den Unterschied zwischen den beiden einigermaßen verdeutlichen.

Zuerst bereiten wir zwei Arrays für die Durchquerung vor:

$arr1=array(1=>'a', 3=>22, 5=>'b', 4=>'c', 8=>'d');

$arr2=array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', 'd'=>'ddd', 'e'=>'eee');

1: for-SchleifeStruktur

Schleife 1:

<?php
for($i=0,$num=count($arr1);$i<$num;$i++){
    echo $arr1[$i].&#39; &#39;;
}
?>

Ausgabeergebnis:

a 22 c

Schleife 2:

<?php
for($i=0,$num=count($arr2);$i<$num;$i++){
    echo $arr2[$i].&#39; &#39;;
}
?>

Diese Anweisung hat keine Ausgabe

Analyse:

Schleife 1 gibt nur die ersten beiden Zellen des Arrays $arr1 aus, während $arr2 in Schleife 2 nichts ausgibt.

Der Grund dafür ist, dass die for-Schleife um Zahlen erhöht wird, sodass for nur auf Arrays zugreifen kann, deren Schlüssel Zahlen sind. Schleife 1 greift beispielsweise inkrementell auf die Schlüssel im Array $arr1 von $i=0 bis $ zu i=4. sind die Zellen 0 bis 4, aber die Schlüssel in diesem Array sind: 1,3,5,4,8. Auf Array-Einheiten mit Schlüsselwerten über 4 (5=>'b',8=>'d') wird nicht zugegriffen, da count($arr1)=5, also $i<5; Nur Ergebnis: a 22 c; für alle Schlüssel in $arr2 sind Zeichen, keine Zahlen, daher erfolgt keine Ausgabe in Schleife 2.

2: foreach-Schleifenstruktur

Schleife 3:

<?php
foreach($arr1 as $key=>$value){
    echo $key.&#39;=>&#39;.$value.&#39; &#39;;
}
?>

Ausgabeergebnis:

1=>a 3=>22 5=>b 4=>c 8=>d

Schleife 4:

<?php
foreach($arr2 as $key=>$value){
    echo $key.&#39;=>&#39;.$value.&#39; &#39;;
}
?>

Ausgabeergebnis:

a=>aaa b=>bbb c=>ccc d=>ddd e=>eee

Analyse:

Die foreach-Schleifenstruktur führt eine Schleife entsprechend dem Zeiger im Array aus array Der Zeiger zeigt automatisch auf die erste Einheit. Daher wird die nächste Einheit in der nächsten Schleife abgerufen und es ist nicht erforderlich, das gesamte Array gemäß dem Array-Schlüssel zu durchlaufen. Dies ist auch der Unterschied zwischen foreach und for. Natürlich kann foreach nur für Arrays und Objekte verwendet werden, und da foreach auf einem internen Array-Zeiger basiert, führt die Änderung seines Werts in einer Schleife wahrscheinlich zu unerwartetem Verhalten.

Hinweis: Jede for-Schleife bearbeitet den Wert unter dem entsprechenden Index , und Änderungen an jedem Wert werden auch im durchlaufenen Objekt widergespiegelt. Jedes Mal, wenn foreach eine Einheit betreibt, übernimmt es deren Index und Wert in Variablen oder entnimmt den Wert nur in eine Variable und verarbeitet die Variablen dann separat mit Index und Wert, ohne das durchquerte Objekt selbst zu beeinflussen. Wenn Sie den Wert im Objekt während des Durchlaufvorgangs ändern möchten, müssen Sie vor der Variablen in der Deklaration ein &-Symbol hinzufügen. Zum Beispiel: foreach($array as &$value).

Fazit: Wenn ein Array fortlaufende Zahlen als Schlüssel der Array-Einheiten verwendet, kann eine for-Schleifenstruktur verwendet werden. Wenn Sie nicht sicher sind, ob die Schlüssel des Arrays oder die Schlüssel des Arrays Zeichen enthalten, sollten Sie die foreach-Schleifenstruktur verwenden.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen for- und foreach-Schleifenstrukturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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