Welche Wiederholungsstrukturen gibt es in PHP?

In PHP gibt es die folgenden Wiederholungstrukturen:
  • while( ... ) { ... }
  • do { ... } while( ... );
  • for( ...; ...; ...) { ... }

Eine besondere Wiederholungstruktur, welche es in dieser Form nur in PHP gibt ist foreach( ... ) { ... }, sie wird nur in Zusammenhang mit Arrays verwendet.

Die Bedingungen der ersten drei Wiederholungstrukturen sehen genau so aus, wie bei if-Abfragen. Für die Wiederholungstruktur foreach gibt es eine eigene Syntax.

Kopfgesteuerte Schleife

Die Verwendung von while ist einfach. while ist die einfachste Form der Schleifen. Die Syntax entspricht C bzw. Java. Eine einfache Schleife sieht zum Beispiel so aus:
 
1 $i = 0;
2 
3 while($i++ < 10)
4 {
5   echo '$i ist ' . $i;
6 
7   if($i < 10)
8     echo ' - ';
9 }
 
Diese Schleife zählt $i von 1 bis 10 und gibt den Wert von $i bei jedem Schleifendurchlauf aus. Vor jedem Durchlauf wird geprüft, ob der Wert von $i kleiner als 10 ist. Wenn dies der Fall ist, wird die Schleife durchlaufen. Nach dem geprüft wurde, wird der Wert von $i um 1 erhöht. Die if-Abfrage nach der Ausgabe gibt einen Bindestrich aus, wenn der Wert von $i kleiner als 10 ist. Dies dient nur dazu, die Ausgabe übersichtlicher zu machen.

Fußgesteuerte Schleife

Dies ist eine Fußgesteuerte Schleife. Die Anwendung dieser Schleife ist ähnlich wie die der while-Schleife. Die Bedingung kommt jedoch an das Ende der Schleife. Der enthaltene Code wird also mindestens einmal ausgeführt. Zu beachten ist, dass die Bedingung mit einem Semikolon abgeschlossen werden muss. Bei einer Kopfgesteuerten Schleife darf dies nicht gemacht werden, da diese sonst nicht wie erwartet funktioniert.
  
 1 $i = 0;
 2 
 3 do
 4 {
 5   echo '$i ist ' . $i;
 6 
 7   if($i < 10)
 8     echo ' - ';
 9 }
10 while($i++ < 10);
  
Diese Schleife zählt $i von 0 bis 10 hoch. Der aktuelle Wert von $i wird bei jedem Schleifendurchlauf ausgegeben. Nachdem die Schleife das erste mal durchlaufen wurde, wird überprüft, ob die Variable $i einen kleineren Wert als 10 hat. Anschließend wird $i um 1 erhöht. Wenn $i mit 20 anstelle von 0 initialisiert würde, dann würde die Schleife einmal "$i ist 20" ausgeben und anschließend beendet.

Zählschleife

Die for-Schleife kann sehr gut verwendet werden, um einen Effekt wie den obigen zu erzielen. Normalerweise kann die Funktion jeder for-Schleife auch mit einer while-Schleife nachgeahmt werden. Die for-Schleife ist aber einfacher in der Anwendung, wenn man sich erstmal an sie gewöhnt hat.
 
1 for($i = 0; $i <= 10; $i++)
2 {
3   echo '$i ist ' . $i;
4 
5   if($i < 10)
6     echo ' - ';
7 }
 
Genau wie in den anderen beiden Beispielen zählt diese Schleife die Variable $i nach oben und gibt den Wert von $i bei jedem Durchlauf aus. Die Schreibweise diese Schleife ist sehr kompakt. Sie eignet sich vorallem für Zählschleifen. Sie kann zum Beispiel auch verwendet werden, um ein Index mit nummerischen Index komplett auszugeben:
  
 1 $values = array('Banane', 'Apfel', 'Birne', 'Kirsche');
 2 
 3 for($i = 0; $i < sizeof($values); $i++)
 4   echo $values[$i];
 5 
 6 /* Vorallem bei großen Arrays ist es oft effizienter, die Größe 
 7  * des Arrays nur einmal zu ermitteln und den Wert in einer
 8  * Variable zu speichern:
 9  */
10 for($i = 0, $n = sizeof($values); $i < $n; $i++)
11   echo $values[$i];
  
Wenn dir die Syntax von for zum jetzigen Zeitpunkt schon klar ist, kannst du jetzt bei der Funktion foreach weiterlesen. Falls nicht, werde ich ihn dir jetzt erklären.

Im Kopf einer for-Schleife können drei Anweisungen abgelegt werden. Die erste Anweisung wird ausgeführt, bevor die Schleife das erste mal ausgeführt wird. Hier können Variablen initialisiert werden, die für die Ausführung der Schleife benötigt werden. Meistens eine Zählvariable. Wie man im obigen Beispiel sehen kann, können auch mehrere Variablen initialisiert werden, indem man ein Komma zum trennen der einzelnen Variablen verwendet.

Der erste und zweite Anweisungsblock werden durch ein Semikolon getrennt. Die zweite Anweisung kann eine Bedingung sein. Die Bedingung kann genau so aussehen, wie bei einer if-Abfrage. Die Bedingung wird vor jedem Durchlauf der Schleife überprüft. Sollte die Bedingung zutreffen (also wahr sein), wird die Schleife durchlaufen, falls nicht, wird mit dem nachfolgenden Code unterhalb des Block-Ende-Zeichens "}" fortgefahren. Die dritte Anweisung wird benutzt, um die Zählvariable zu erhöhen. Dies kann zum Beispiel mit dem Operator ++ gemacht werden.

foreach

Die foreach-Wiederholungstruktur existiert seit PHP4. Sie soll das durchlaufen von Arrays mit assoziativem Schlüssel erleichertn. Assoziative Schlüssel sind frei vergebene Namen oder ein Index, der nicht bei 0 beginnt oder Lücken hat. Wenn ein Array mit foreach durchlaufen wird, dann wird zuvor automatisch eine Kopie des Arrays erzeugt. foreach kann auf zwei Arten genutzt werden:
  
 1 $werte = array(
 2   'Titel' => 'Mein Beitrag',
 3   'Text' => 'Dies ist der Beitragstext',
 4   'Autor' => 'Mustermann'
 5 );
 6 
 7 foreach($werte as $wert)
 8 {
 9   echo $wert . '<br />';
10 }
11 
12 // oder
13 
14 foreach($werte as $schluessel => $wert)
15 {
16   echo $schluessel . ': ' . $wert . '<br />';
17 }
  
Bei der ersten Variante steht der Schlüssel nicht zur Verfügung, diese Variante sollte verwendet werden, wenn der Schlüssel nicht benötigt wird. In der zweiten Variante steht der Schlüssel in der Variable $schluessel zur Verfügung. Die Ausgabe würde im Browser in etwa so aussehen:
 
1 Titel: Mein Beitrag
2 Text: Dies ist der Beitragstext
3 Autor: Mustermann
 

Schlüsselwörter

Bei der Arbeit mit Wiederholungsstrukturen sind die Schlüsselwörter break und continue relativ wichtig. Das Schlüsselwort break ermöglicht das sofortige verlassen eine Schleife ohne dass der nachfolgende Code ausgeführt wird.
 
1 $i = 0;
2 
3 while($i++ < 10)
4 {
5   if($i == 5)
6     break;
7 }
8 
9 echo $i;
 
Die Ausgabe dieses PHP-Scriptes wird 5 lauten, da die Schleife durch break verlassen wird, sobald $i den Wert von 5 annimmt. Ähnlich funktioniert continue. Wenn die Anweisung continue in einem PHP-Script innerhalb einer Schleife erreicht wird, dann wird der nachfolgende Code der Schleife nicht mehr ausgeführt. Die Schleife wird jedoch nicht unterbrochen.
  
 1 $i = 0;
 2 
 3 while($i++ < 10)
 4 {
 5   if($i > 5)
 6     continue;
 7     
 8   echo 'Testen<br />';
 9 }
10 
11 echo $i;
  
Diese Schleife wird 5 mal hintereinander "Testen" ausgeben. Der Wert von $i ist nach Ausführung dieses Scriptes 11.

Die soeben vorgestellten Schlüsselwörter können auch mit allen anderen Wiederholungstrukturen zusammen genutzt werden.