W3docs

PHP-Schleifen mit der While-Schleife

Die while-Schleife in PHP wiederholt einen Codeblock, solange eine Bedingung wahr ist. Erfahren Sie Syntax, Endlosschleifen und den Unterschied zu do...while.

Die while-Schleife in PHP wiederholt einen Codeblock solange eine bestimmte Bedingung true bleibt. Sie ist das richtige Werkzeug, wenn Sie die Anzahl der Iterationen nicht im Voraus kennen – zum Beispiel beim Lesen von Datenbankzeilen, bis keine mehr übrig sind, oder beim Abfragen von Eingaben, bis diese gültig sind. Wenn Sie die Anzahl der Iterationen im Voraus kennen, ist eine for-Schleife in der Regel übersichtlicher.

Dieser Artikel behandelt die Syntax der while-Schleife, wie ihre Bedingung ausgewertet wird, die alternative endwhile-Form, Endlosschleifen und wie man aus ihnen ausbricht, sowie den Unterschied zwischen while und der verwandten do...while-Schleife.

Aufbau der While-Schleife

Der grundlegende Aufbau der while-Schleife in PHP sieht folgendermaßen aus:

PHP-while-Schleife – Syntax

while (condition) {
  // code to be executed
}

Die condition ist ein beliebiger Ausdruck, den PHP zu einem boolean (true oder false) auswertet. Die Schleife funktioniert in drei Schritten:

  1. Die condition wird vor jeder Iteration ausgewertet.
  2. Ist sie true, wird der Schleifenkörper einmal ausgeführt.
  3. PHP kehrt zu Schritt 1 zurück und wertet die Bedingung erneut aus.

Das ist wichtig: Da der Test zuerst erfolgt, wird der Schleifenkörper null Mal ausgeführt, wenn die Bedingung von Anfang an false ist. Etwas innerhalb der Schleife (oder die Bedingung selbst) muss die Bedingung schließlich false machen, sonst läuft die Schleife endlos – siehe Endlosschleifen weiter unten.

Alternative endwhile-Syntax

PHP bietet auch eine Doppelpunkt-und-endwhile-Form, die sich anbietet, wenn Sie Schleifen mit HTML in einem Template mischen:

<?php $i = 1; ?>
<ul>
<?php while ($i <= 3): ?>
  <li>Item <?php echo $i; ?></li>
  <?php $i++; ?>
<?php endwhile; ?>
</ul>

Beide Formen verhalten sich identisch; wählen Sie diejenige, die im jeweiligen Kontext besser lesbar ist.

Beispiel zur Verwendung der While-Schleife

Betrachten wir ein Beispiel, bei dem die while-Schleife die Zahlen von 1 bis 10 ausgibt. Hier ist der Code:

PHP-Beispiel zur Verwendung der While-Schleife

php— editable, runs on the server

In diesem Beispiel initialisieren wir eine Variable $i mit 1 und setzen die Bedingung auf $i <= 10. Die Schleife läuft, solange $i 10 oder kleiner ist. In jeder Iteration geben wir den Wert von $i aus und erhöhen ihn um 1. Sobald $i den Wert 11 erreicht, ist die Bedingung false und die Schleife endet. Die Ausgabe des Codes lautet:

1 2 3 4 5 6 7 8 9 10

Ein praktisches Beispiel: Iteration über ein Array

while wird häufig mit einem Zähler verwendet, um ein indiziertes Array zu durchlaufen. Die Bedingung stoppt die Schleife bei der Länge des Arrays, sodass kein Zugriff über das Ende hinaus erfolgt:

<?php

$fruits = ["Apple", "Banana", "Cherry"];
$i = 0;

while ($i < count($fruits)) {
  echo $fruits[$i] . "\n";
  $i++;
}

?>

Dies gibt jede Frucht in einer eigenen Zeile aus:

Apple
Banana
Cherry

Wenn Sie wie hier über die Elemente eines Arrays iterieren, ist eine foreach-Schleife in der Regel die sauberere Wahl – sie entfernt den manuellen Zähler vollständig. Verwenden Sie while, wenn der Stopppunkt von etwas anderem als einer bekannten Länge abhängt (z. B. ob noch Daten verfügbar sind).

Endlosschleifen und das Verlassen von Schleifen

Es ist möglich, eine Endlosschleife zu erstellen, indem in der Bedingung der while-Schleife ein Ausdruck verwendet wird, der immer true ergibt. Zum Beispiel:

PHP-Endlos-while-Schleife – Syntax

while (true) {
  // code to be executed
}

In solchen Fällen ist es notwendig, die break-Anweisung zu verwenden, um die Schleife zu beenden, wenn eine bestimmte Bedingung erfüllt ist. Die break-Anweisung stoppt die Schleife sofort und fährt mit der nächsten Anweisung nach der Schleife fort. Hier ist ein Beispiel:

Endlosschleifen und das Verlassen von Schleifen

php— editable, runs on the server

In diesem Beispiel gibt die Schleife die Zahlen von 1 bis 10 aus und hört dann auf. Der if-Test in Kombination mit break fungiert als eigentliche Abbruchbedingung. Die verwandte continue-Anweisung ist anders: Anstatt die Schleife zu verlassen, überspringt sie den Rest der aktuellen Iteration und springt direkt zurück zur Bedingungsprüfung.

while vs. do...while

Eine while-Schleife prüft ihre Bedingung vor der Ausführung des Schleifenkörpers, daher wird der Körper möglicherweise nie ausgeführt. Die do...while-Schleife ist ihr Spiegelbild: Sie prüft die Bedingung nach dem Körper und garantiert, dass der Körper mindestens einmal ausgeführt wird.

<?php

$i = 100;

// Condition is false from the start — body never runs:
while ($i < 10) {
  echo "while: $i\n";
  $i++;
}

// Body runs once, then the condition is checked:
do {
  echo "do-while: $i\n";
  $i++;
} while ($i < 10);

?>

Ausgabe:

do-while: 100

Verwenden Sie do...while, wenn die Aktion ausgeführt werden muss, bevor Sie wissen können, ob sie wiederholt werden soll – zum Beispiel beim Abfragen einer Eingabe, die nur dann erneut abgefragt wird, wenn sie ungültig war.

Fazit

Die while-Schleife führt einen Codeblock aus, solange ihre Bedingung true bleibt, wobei die Bedingung vor jeder Iteration geprüft wird. Beachten Sie die drei wichtigsten Punkte für eine sichere Verwendung: Initialisieren Sie Ihre Steuervariable vor der Schleife, schreiben Sie eine Bedingung, die schließlich false wird, und aktualisieren Sie diese Variable (oder nutzen Sie break) innerhalb des Schleifenkörpers. Weitere Schleifenoptionen finden Sie in der Übersicht der PHP-Schleifen, der zählgesteuerten for-Schleife und den Vergleichsoperatoren, die Sie zum Erstellen von Schleifenbedingungen verwenden werden.

Diagramm

graph TD;
  A[While Loop Structure] --> B[Expression Evaluation];
  B --> C{Execute Code};
  C --> B;
  B --> D[False];
  D --> E[End Loop];

Übungen

Übung
Was sind die Eigenschaften der 'while'-Schleife in PHP?
Was sind die Eigenschaften der 'while'-Schleife in PHP?
Was this page helpful?