while-Schleifen in PHP

Wenn man in PHP einen bestimmten Programmcode wiederholen lassen möchte, ohne dass man denselben Code mehrmals schreiben muss, kann man Schleifen verwenden. Ein typischer Anwendungsfall ist eine Datenbankbafrage, mit der die Datensätze z.B. zeilenweise ausgegeben werden sollen. Eine einfache Form hierfür stellt die while-Schleife dar. Hierbei wird zunächst eine Zählvariable auf einen Initialwert gesetzt. Als Variable wird dabei häufig $i verwendet, man könnte aber auch einen anderen Variablennamen nehmen. Danach erfolgt eine Prüfung auf eine Bedingung, z.B. ob die Zählvariable kleiner oder gleich 10 ist. Trifft das zu, liefert die Bedingungsprüfung den Rückgabewert TRUE, der Programmcode wird ausgeführt und die Zählvariable wird um 1 hochgezählt, sodass bei der nächsten Prüfung der neue Wert berücksichtigt wird. Dieser Vorgang wird solange wiederholt, bis die Bedingungsprüfung den Rückgabewert FALSE liefert und die Schleife beendet wird.

PHP while-Schleife

Aufbau einer while-Schleife

Der nachfolgende Code beschreibt den typischen Aufbau einer while-Schleife. Zunächst wird die Zählvariable $i auf einen Startwert gesetzt. Danach folgt die eigentliche Schleife mit der Bedingungsprüfung. In diesem Beispiel wird geprüft, ob die Zählvariable kleiner als 10 ist. Liefert die Prüfung den Rückgabewert TRUE, wird der Code innerhalb der geschweiften Klammern ausgeführt. In diesem Beispiel wird die Zählvariable und ein Zeilenumbruch ausgegeben und danach die Zählvariable hochgezählt. Die gesamte Schleife bewirkt, dass die Zahlen 0 bis 9 untereinander ausgegeben werden.

<?php

// Zählvariable setzen
$i = 0;

// Bedingungsprüfung
while ($i < 10)

// Programmcode bei Rückgabewert TRUE
{
  // Beispielcode
  echo $i . '<br>';

  // Zählvariable hochzählen
  $i++;
}
?>

Höheren Startwert herunterzählen

Es ist natürlich genauso möglich, mit einem höheren Startwert zu beginnen, z.B. mit 10 und bei jeder Wiederholung die Zählvariable um 1 herunterzählen zu lassen. Mit dem folgenden Code werden nacheinander die Zahlen von 10 bis 1 ausgegeben.

<?php

// Zählvariable setzen
$i = 10;

// Bedingungsprüfung
while ($i != 0)

// Programmcode bei Rückgabewert TRUE
{
  // Beispielcode
  echo $i . '<br>';

  // Zählvariable herunterzählen
  $i--;
}
?>

while-Schleife ohne geschweifte Klammer

Falls die Bedingungsprüfung den Rückgabewert TRUE liefert, wird der Code innerhalb der geschweiften Klammern ausgeführt. Es gibt noch eine andere Schreibweise, bei der die geschweiften Klammern entfallen können. In dem Fall wird nach der Bedingungsprüfung ein Doppelpunkt eingefügt und der auszuführende Code wird mit endwhile; beendet.

<?php

$i = 0;

while ($i < 10):

  echo $i . '<br>';
  $i++;

endwhile;
?>

while-Schleifen verschachteln

Es ist auch möglich, while-Schleifen zu verschachteln, sodass eine Schleife eine weitere Schleife enthält. In solchen Fällen wird zuerst die Bedingung bei der Elternschleife geprüft. Trifft die Bedingung zu, wird die Kindschleife solange abgearbeitet, bis die Bedingung bei der Kindschleife nicht zutrifft. Danach wird wieder mit der Elternschleife fortgeführt. Der Vorgang wiederholt sich solange, bis die Bedingung bei der Elternschleife nicht zutrifft. Mit dem folgenden Beispielcode wird mit Bindestrichen eine halbe Pyramide ausgegeben. Zu Übungszwecken kann versucht werden, die einzelnen Schritte nachzuvollziehen.

<?php

$i = 0;

// Elternschleife
while ($i <= 10)
{
  $j = 0;

  // Kindschleife
  while ($j <= $i)
  {
    echo '- &nbsp;';
    $j++;      
  }
  echo '<br>';
  $i++;
}
?>

while-Schleife mit unbestimmter Wiederholungszahl (Arrays)

Bei den vorangegangenen Beispielen war die Anzahl der Wiederholungen bekannt. Es kommt jedoch häufig vor, dass die Anzahl der Wiederholungen unbekannt ist, z.B. beim Auslesen von Arrays, die eine unbestimmte Anzahl an Werten enthalten können. Beim folgenden Beispielcode ist die while-Schleife so konzipiert, dass zeilenweise alle Werte eines Arrays ausgegeben werden.

<?php

$tage = array('Mo', 'Di', 'Mi', 'Do', 'Fr');

$i = 0;
$j = count ($tage);

while ($i < $j)
{
  echo $tage[$i] . '<br>';
  $i++;      
}
?>

Im Array $tage sind die Wochentage von Mo - Fr gespeichert. Die Anzahl der Werte wird mit count ($tage); ermittelt und der Variable $j zugewiesen. Solange die Zählvariable $i kleiner oder gleich $j ist, gibt echo $tage[$i] (entspricht zu Beginn $tage[0]) zeilenweise die Werte aus. Die jeweils um 1 hochgezählte Variable $i dient dabei gleichzeitig als Index des Arrays.

Man könnte die Funktion count ($tage); auch direkt in die Bedingungsprüfung einbauen. So kann die Zuweisung zur Variable $j und die Bedingungsprüfung damit entfallen. Der folgende Code würde dasselbe bewirken.

<?php

$tage = array('Mo', 'Di', 'Mi', 'Do', 'Fr');

$i = 0;

while ($i < count ($tage))
{
  echo $tage[$i] . '<br>';
  $i++;      
}
?>

Mit diesem Code spielt es im Grunde keine Rolle, wie viele Werte das Array enthält, da die Anzahl mit count ($arrayname) ausgelesen wird und die Zählvariable bei der Bedingungsprüfung damit verglichen werden kann.