for-Schleifen in PHP

In PHP hat man es häufig mit wiederholenden Vorgängen zu tun. Wenn man beispielsweise eine Datenbankabfrage durchführt und die Daten in einer Tabelle ausgeben möchte, so wiederholen sich die Vorgänge bei der Bildung von Tabellen, Zeilen und Spalten. Solche Wiederholungen lassen sich in PHP mit Schleifen realisieren, zu denen auch die for-Schleife. gehört und die ähnlich wie die while-Schleife funktioniert.

Auch bei der for-Schleife wird gewöhnlich eine Zählvariable verwendet, die auf einen initialen Wert gesetzt wird und wofür man häufig $i verwendet. Es erfolgt eine Bedingungsabfrage, bei der die Zählvariable geprüft wird. Wenn die Prüfung den Rückgabewert TRUE liefert, wird der Programmcode ausgeführt und die Zählvariable wird um 1 hochgezählt. Danach erfolgt erneut eine Bedingungsabfrage. Dieser Vorgang wird so lange wiederholt, bis die Schleife mit dem Rückgabewert FALSE beendet wird.

PHP for-Schleife

Der Unterschied zwischen der while- und der for-Schleife besteht in der Anordnung des PHP-Codes. Bei der for-Schleife ist das Übergeben der Zählvariable mit dem Initialwert sowie das Hochzählen bereits in der Schleifenfunktion vorgesehen. Auf der folgenden Abbildung sind die einzelnen Bestandteile einer for-Schleife abgebildet.

Aufbau einer for-Schleife

Beispielcode mit einer for-Schleife

Beim folgenden Code wird die Zählvariable $i mit dem Wert 0 initialisiert. Solange die Zählvariable kleiner als 10 ist, wird der Programmcode ausgeführt und $i wird um 1 hochgezählt. Der Programmcode bewirkt, dass nacheinander die Zahlen 0 bis 9 (mit Zeilenumbruch) ausgegeben werden. Der Code erscheint etwas übersichtlicher als bei der while-Schleife.

<?php

for ($i = 0; $i < 10; $i++)

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

Zählvariable herunterzählen

Es ist genauso möglich, mit einem höheren Startwert für die Zählvariable zu beginnen und es herunterzählen zu lassen. Mit dem folgenden Code werden untereinander die Zahlen 10 bis 1 ausgegeben.

<?php

for ($i = 10; $i > 0; $i--)

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

for-Schleifen verschachteln

Es ist möglich, for-Schleifen zu verschachteln, sodass sie weitere Schleifen enthalten. In solchen Fällen wird die Kindschleife komplett abgearbeitet, wenn die Bedingungsprüfung bei der Elternschleife den Rückgabewert TRUE liefert. Liefert die Bedingungsprüfung bei der Kindschleife den Rückgabewert FALSE, wird mit der Elternschleife fortgeführt, bis diese ebenfalls mit dem Rückgabewert FALSE beendet wird. Mit dem folgenden Code wird mit Bindestrichen eine halbe Pyramide gebildet.

<?php

// Elternschleife
for ($i = 0; $i <= 10; $i++)
{

  // Kindschleife
  for ($j = 0; $j <= $i; $j++)
  {
    echo '- &nbsp;';
  }

  echo '<br>';
}
?>

for-Schleifen mit unbestimmter Wiederholungszahl (Arrays)

Häufig ist die Anzahl der Wiederholungen nicht bekannt, die man bei der Bedingungsprüfung angeben kann. Das kann z.B. bei Arrays der Fall sein, die viele Werte enthalten können. Eine Lösung hierbei kann sein, mit der Funktion count(...); die Anzahl der Werte des Arrays zu ermitteln und bei der Bedingungsprüfung damit zu vergleichen.

Beim folgenden Code sind die Wochentage Mo - Fr im Array $tage gespeichert. Die Anzahl der Werte wird mit count ($tage); ermittelt und der Variable $j zugewiesen. Solange die Zählvariable $i kleiner als $j ist, gibt echo $tage[$i] (entspricht zu Beginn $tage[0]) nacheinander die Werte des Arrays aus. Die Zählvariable $i dient dabei gleichzeitig als Index des Arrays und wird jeweils um 1 hochgezählt. Auf diese Weise können alle Werte des Arrays ausgegeben werden.

<?php

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

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

Man kann die Funktion count(...) auch direkt in die Bedingungsprüfung bei der for-Schleife implementieren, sodass der Umweg über die Variable $j entfallen kann. Der folgende Code bewirkt im Grunde dasselbe.

<?php

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

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

Mit diesem Code würde es keine Rolle spielen, wie viele Werte ein Array enthält. Durch den hochzählenden Index würden sie nacheinander ausgegeben werden. Man kann so auch Arrays verarbeiten, deren Inhalte unbekannt sind.