Websiteentwicklung: PHP: Praktische Einführung: Schleifen

Aus Wikibooks
Zur Navigation springen Zur Suche springen
Nuvola apps important.svg ACHTUNG: Dieses Buch oder Kapitel bedarf dringend einer Überarbeitung oder Erweiterung. Wenn du Lust hast, beteilige dich an der Verbesserung!


Schleifen sind Kontrollstrukturen, mit deren Hilfe man Codeabschnitte beliebig oft wiederholen kann. In PHP gibt es grundsätzlich drei (bzw. vier) verschiedene Arten von Schleifen.

while[Bearbeiten]

Eine while-Schleife wird so oft wiederholt, wie die Bedingung im Schleifenkopf als true ausgewertet wird (siehe dazu auch das Kapitel zu Castings). Dabei ist zu beachten, dass in jedem Durchlauf immer zuerst geprüft wird, ob die Bedingung "wahr" ist und danach ggf. der Schleifenrumpf ausgeführt wird. Wenn die Abbruchbedingung nicht wahr ist, wird das Programm nach der Schleife fortgesetzt. Es kann also sein, dass diese Schleife auch gar nicht ausgeführt wird. Daher nennt man die While-Schleife eine Kopf-gesteuerte Schleife.

$i = 1;
while($i < 4)
{
  echo $i; # => aktuellen Wert von $i ausgeben
  $i++;    # => $i wird um eins erhöht
}
# Die Ausgabe wäre: 123

In diesem Beispiel würde der Schleifenrumpf dreimal ausgeführt. Sobald $i den Wert 4 erhält, ist die Bedingung $i < 4 (in diesem Fall also 4 < 4) nicht mehr wahr und somit wird die Schleife für 4 kein weiteres Mal ausgeführt.

do-while[Bearbeiten]

Die do-while-Schleife funktioniert so ähnlich wie die while-Schleife, aber mit dem entscheidenden Unterschied, dass die Prüfung der Bedingung bei jedem Schleifendurchlauf immer erst nach dem Ausführen des Schleifenrumpfes geschieht.

Im Gegensatz zur while-Schleife wird hierbei an den Anfang des Rumpfes das Schlüsselwort do gestellt und das while mit der Abbruchbedingung (wie es schon in der normalen while-Schleife am Kopf des Rumpfes zu finden ist) an das Fuß bzw. Ende des Rumpfes.

$i = 1;
do
{
  echo $i; # => aktuellen Wert von $i ausgeben
  $i++;    # => $i wird um eins erhöht
}
while($i < 4);
# Die Ausgabe wäre auch hier: 123

Im Unterschied zur while-Schleife wird die do-while-Schleife auf jeden Fall mindestens einmal ausgeführt, da die Abbruchbedingung erst nach dem Ausführen am Ende bzw. am Fuß des Rumpfes geprüft wird. Daher nennt man sie auch eine Fuß-gesteuerte Schleife.

foreach[Bearbeiten]

Die foreach-Schleife wurde bereits im Kapitel der Arrays behandelt.

for[Bearbeiten]

Die for-Schleife ist die komplizierteste Schleife in PHP. Meistens wird sie dazu verwendet um über Arrays (oder andere abzählbare Strukturen) zu iterieren. Der Schleifenkopf der for-Schleife besteht aus drei unterschiedlichen Teilen, die voneinander durch ein Semikolon getrennt sind:

  • Der erste Abschnitt wird vor dem ersten Durchlauf der Schleife ausgeführt.
  • Der zweite Abschnitt wird vor dem Beginn jedes einzelnen Durchlaufs ausgeführt. Außerdem wird dieser Abschnitt auch als Schleifenbedingung verwendet. Die Schleife wird also solange wiederholt, wie der Ausdruck in diesem Abschnitt als true ausgewertet wird.
  • Der dritte Abschnitt wird nach dem Ende jedes einzelnen Durchlaufs durchgeführt.
$personen = array('Anna', 'Berta', 'Chris');

for($i = 0; $i < count($personen); $i++)
{
  echo $personen[$i]." ";
}
# Die Ausgabe wäre in diesem Fall: "Anna Berta Chris "

Wenn man den Schleifenkopf in diesem Beispiel analysiert, stellt man fest, dass im ersten Abschnitt (also vor dem allerersten Durchlauf) die Variable $i auf 0 gesetzt wird und dass im letzten Abschnitt (also nach dem Ende eines jeden Durchlaufs) der Wert von $i um eins erhöht wird.

Die Bedingung - also der zweite Abschnitt - gibt in diesem Beispiel solange true zurück, wie $i kleiner als 3 ist, da das Array $personen drei Elemente hat. Das bedeutet, dass die Schleife dreimal durchlaufen wird, wobei $i erst den Wert 0, beim zweiten Mal 1 und schließlich den Wert 2 hat.

Weiteres[Bearbeiten]

break[Bearbeiten]

Mit break lässt sich die Ausführung der Schleife an einem bestimmten Punkt unterbrechen. Ein simples Beispiel:

$i = 1;
while($i < 10)
{
  echo $i; # => aktuellen Wert von $i ausgeben
    if($i === 5){
      break;
    }
  $i++;    # => $i wird um eins erhöht
}
# Die Ausgabe wäre: 12345

continue[Bearbeiten]

Mit continue lässt sich die Schleife an einer beliebigen Stelle fortführen.

<?php
while (list($key, $value) = each($arr)) {
    if (!($key % 2)) { // ignoriere ungerade Werte
        continue;
    }
    mach_etwas_ungerade($value);
}