W3docs

while

Das PHP-Schlüsselwort "while" erstellt eine Schleife, die einen Codeblock wiederholt ausführt, solange eine Bedingung wahr ist.

Die PHP while-Schleife

Die while-Schleife ist die einfachste Schleife in PHP. Sie führt einen Codeblock immer wieder aus, solange eine Bedingung wahr bleibt, und hält an dem Moment an, in dem diese Bedingung falsch wird. Verwende sie, wenn du vorab nicht weißt, wie viele Iterationen du benötigst — zum Beispiel beim Lesen von Datenbankzeilen, bis keine mehr vorhanden sind, oder beim Wiederholen einer Operation, bis sie erfolgreich ist.

Diese Seite behandelt die Syntax von while, die alternative endwhile-Form, wie sich while von do...while unterscheidet, und den häufigsten Fehler — die Endlosschleife — sowie wie man ihn vermeidet.

Syntax

while (condition) {
  // Code to be executed while the condition is true
}

Die Bedingung wird vor jeder Iteration ausgewertet:

  1. PHP prüft die condition.
  2. Ist sie true, wird der Rumpf einmal ausgeführt, dann kehrt PHP zu Schritt 1 zurück.
  3. Ist sie false, endet die Schleife und die Ausführung wird nach der schließenden geschweifte Klammer fortgesetzt.

Da die Prüfung zuerst erfolgt, kann der Rumpf null Mal ausgeführt werden — wenn die Bedingung bereits bei der ersten Prüfung falsch ist, wird der Schleifenrumpf vollständig übersprungen.

Alternative endwhile-Syntax

PHP bietet auch eine Doppelpunkt-und-endwhile-Form, die praktisch ist, wenn du Schleifen mit HTML in einer Vorlage kombinierst:

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

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

Verwendung

Das Schlüsselwort while wird in der PHP-Programmierung häufig verwendet, um Schleifen zu erstellen, die einen Codeblock so lange wiederholen, bis eine bestimmte Bedingung erfüllt ist. Zum Beispiel könntest du eine while-Schleife verwenden, um über die Elemente eines Arrays zu iterieren:

Beispiel des PHP-while-Schlüsselworts

php— editable, runs on the server

In diesem Beispiel wird die while-Schleife verwendet, um über die Elemente des Arrays $myArray zu iterieren. Die Variable $i wird verwendet, um den aktuellen Index im Array zu verfolgen, und die Schleife wird so lange ausgeführt, wie $i kleiner als die Anzahl der Elemente im Array ist. Innerhalb der Schleife verwenden wir die echo-Anweisung, um das aktuelle Element des Arrays auszugeben, und erhöhen dann $i, um zum nächsten Element zu gelangen.

Beispiele

Hier sind einige weitere Beispiele, wie die while-Schleife in der PHP-Programmierung verwendet werden kann.

Beispiel 1: Zufallszahl generieren, bis eine bestimmte Bedingung erfüllt ist

php— editable, runs on the server

In diesem Beispiel verwenden wir eine while-Schleife, um Zufallszahlen zu generieren, bis wir eine Zahl erhalten, die größer oder gleich 10 ist. Innerhalb der Schleife generieren wir mit der Funktion rand() eine Zufallszahl und geben sie mit der echo-Anweisung aus. Wir generieren und geben so lange Zufallszahlen aus, bis wir eine Zahl erhalten, die größer oder gleich 10 ist.

Beispiel 2: Über ein Datenbankresultatset iterieren

Über ein Datenbankresultatset in PHP iterieren

<?php

$query = "SELECT * FROM my_table";
$result = mysqli_query($conn, $query);

while ($row = mysqli_fetch_assoc($result)) {
  echo $row['column_name'] . "<br>";
}

In diesem Beispiel verwenden wir eine while-Schleife, um über das von einer Datenbankabfrage zurückgegebene Resultatset zu iterieren. Die Funktion mysqli_fetch_assoc() gibt die nächste Zeile als assoziatives Array zurück, oder false, wenn keine weiteren Zeilen vorhanden sind — sodass die Schleife automatisch stoppt, sobald das Resultatset erschöpft ist. Dies funktioniert, weil die Zuweisung $row = mysqli_fetch_assoc($result) zum zugewiesenen Wert ausgewertet wird, und false die Schleife beendet.

Endlosschleifen vermeiden

Der häufigste Fehler bei while ist das Vergessen, die Variable zu ändern, von der die Bedingung abhängt. Wenn die Bedingung niemals falsch wird, läuft die Schleife für immer und friert dein Skript ein:

<?php

$i = 0;

// Bug: $i is never incremented, so $i < 5 stays true forever.
while ($i < 5) {
  echo "running...\n";
  // $i++;  <-- this line is missing
}

Stelle immer sicher, dass innerhalb der Schleife etwas die Bedingung in Richtung false bewegt. Du kannst auch frühzeitig mit break beenden oder den Rest der aktuellen Iteration mit continue überspringen.

while vs. do...while

Eine while-Schleife prüft die Bedingung vor der Ausführung des Rumpfs, sodass der Rumpf möglicherweise null Mal ausgeführt wird. Eine do...while-Schleife prüft die Bedingung nach dem Rumpf, sodass der Rumpf immer mindestens einmal ausgeführt wird:

<?php

$i = 10;

// Condition is false from the start, so this prints nothing.
while ($i < 5) {
  echo "while: $i\n";
  $i++;
}

// do...while runs the body once before checking, so it prints "do-while: 10".
do {
  echo "do-while: $i\n";
  $i++;
} while ($i < 5);

Greife auf do...while zurück, wenn der Schleifenrumpf mindestens einmal ausgeführt werden muss (zum Beispiel beim Auffordern eines Benutzers, bis er eine gültige Eingabe macht).

Fazit

Die while-Schleife führt einen Codeblock aus, solange ihre Bedingung wahr ist, und prüft diese Bedingung vor jedem Durchlauf. Verwende sie, wenn die Anzahl der Iterationen nicht im Voraus bekannt ist, schütze vor Endlosschleifen, indem du die Bedingung im Rumpf aktualisierst, und wähle do...while, wenn der Rumpf mindestens einmal ausgeführt werden muss.

Um andere Möglichkeiten zur Wiederholung von Code in PHP zu erkunden, sieh dir die for-Schleife an (am besten, wenn du die Anzahl der Iterationen kennst) und die foreach-Schleife (am besten für das Durchlaufen von Arrays). Einen allgemeinen Vergleich aller Schleifen findest du in der Übersicht PHP-Schleifen.

Übungen

Übung
Wie lautet die Syntax einer 'while'-Schleife in PHP?
Wie lautet die Syntax einer 'while'-Schleife in PHP?
Was this page helpful?