W3docs

PHP-Schleifen mit der "for"-Anweisung

Lerne die PHP "for"-Schleife: Initialisierung, Bedingung und Inkrement – plus Hoch-/Runterzählen, eigene Schrittweiten, Array-Iteration, verschachtelte Schleifen, break und continue.

In PHP ist die for-Anweisung eine Kontrollstruktur, die einen Codeblock eine bekannte Anzahl von Malen ausführt. Du greifst darauf zurück, wenn die Anzahl der Iterationen fest und vorhersehbar ist — etwa zum Ausgeben der Zahlen von 1 bis 10, zum Erstellen einer HTML-Tabelle mit N Zeilen oder zum Durchlaufen eines indizierten Arrays nach Position.

Dieses Kapitel behandelt die drei Teile einer for-Schleife, wie jeder davon ausgeführt wird, sowie praktische Muster: Hoch- und Runterzählen, benutzerdefinierte Schrittweiten, Array-Iteration, verschachtelte Schleifen und die Schlüsselwörter break / continue.

Syntax

Eine for-Schleife besteht aus drei Ausdrücken in den Klammern, die durch Semikolons getrennt sind, gefolgt vom Schleifenkörper in geschweiften Klammern:

for (initialization; condition; increment) {
  // code to be executed on each pass
}

Die drei Ausdrücke werden in einer bestimmten Reihenfolge ausgeführt:

  1. Initialisierung wird einmalig ausgeführt, bevor die Schleife beginnt — normalerweise wird dabei ein Zähler gesetzt.
  2. Bedingung wird vor jeder Iteration geprüft. Solange sie true ist, wird der Körper ausgeführt; wenn sie false wird, stoppt die Schleife.
  3. Inkrement wird nach jeder Iteration ausgeführt, kurz bevor die Bedingung erneut geprüft wird — normalerweise rückt es den Zähler vor.

Initialisierung

Die Initialisierung legt den Startwert des Zählers fest. Sie wird genau einmal ganz am Anfang ausgeführt. Um beim Zählen bei 1 zu beginnen:

$counter = 1;

Bedingung

Die Bedingung entscheidet, wann gestoppt wird. Die Schleife läuft weiter, solange die Bedingung wahr ist. Um zu schleifen, während der Zähler 10 oder weniger ist:

$counter <= 10;

Wenn die Bedingung beim ersten Prüfen false ist, wird der Körper überhaupt nicht ausgeführt.

Inkrement

Das Inkrement ändert den Zähler nach jedem Durchlauf, damit die Schleife schließlich endet. Um bei jedem Durchlauf 1 zu addieren:

$counter++;

Wenn das Inkrement die Bedingung niemals false werden lässt, entsteht eine Endlosschleife. Stelle sicher, dass der Zähler sich in Richtung der Abbruchbedingung bewegt.

Ein vollständiges Zählbeispiel

Wenn man die drei Teile zusammensetzt, gibt diese Schleife den Wert von $counter bei jedem Durchlauf aus, von 1 bis 10:

php— editable, runs on the server

Der obige Code gibt aus:

1 2 3 4 5 6 7 8 9 10 

(Ohne . " " würde echo die Ziffern ohne Lücken ausgeben — 12345678910 — da echo zwischen Werten nichts einfügt.)

Runterzählen und benutzerdefinierte Schrittweiten

Das Inkrement ist nur ein Ausdruck, er kann also dekrementieren oder in anderen Schritten als 1 voranschreiten. Um rückwärts von 10 bis 1 zu zählen, beginne hoch, stoppe bei 1 und verwende $i--:

<?php

for ($i = 10; $i >= 1; $i--) {
  echo $i . " ";
}

?>

Um in 2er-Schritten zu zählen (gerade Zahlen bis 10 ausgeben), verwende $i += 2:

<?php

for ($i = 2; $i <= 10; $i += 2) {
  echo $i . " ";   // 2 4 6 8 10
}

?>

Durch ein Array iterieren

Eine for-Schleife kann ein indiziertes Array nach Position durchlaufen. Die Bedingung verwendet count(), um die Anzahl der Elemente zu ermitteln, und $i wird als Array-Index verwendet:

php— editable, runs on the server

Der obige Code gibt aus:

apple
banana
cherry

Beachte, dass die Schleife bei 0 beginnt (PHP-Arrays sind nullindiziert) und die Bedingung $i < count($fruits) lautet — mit < statt <=, da der letzte gültige Index count - 1 ist.

Für Arrays — insbesondere assoziative Arrays, bei denen die Schlüssel keine aufeinanderfolgenden ganzen Zahlen sind — ist die foreach-Schleife in der Regel klarer und sicherer als eine for-Schleife, da man keinen Index manuell verwalten muss.

Verschachtelte Schleifen

Du kannst eine for-Schleife in eine andere einbetten. Die innere Schleife wird bei jedem einzelnen Durchlauf der äußeren Schleife vollständig ausgeführt. Dies ist üblich für Raster, Tabellen und multiplikationsähnliche Ausgaben:

<?php

for ($row = 1; $row <= 3; $row++) {
  for ($col = 1; $col <= 3; $col++) {
    echo $row * $col . "\t";
  }
  echo "\n";
}

?>

Dies gibt ein 3×3-Multiplikationsraster aus:

1	2	3	
2	4	6	
3	6	9	

Abbrechen und Iterationen überspringen

Zwei Schlüsselwörter geben dir feinere Kontrolle innerhalb des Schleifenkörpers:

  • break beendet die Schleife sofort und setzt mit dem Code danach fort.
  • continue überspringt den Rest der aktuellen Iteration und springt zur nächsten (das Inkrement wird trotzdem ausgeführt).
<?php

for ($i = 1; $i <= 10; $i++) {
  if ($i == 4) {
    continue;   // skip 4
  }
  if ($i == 7) {
    break;      // stop entirely at 7
  }
  echo $i . " ";
}

?>

Der obige Code gibt aus:

1 2 3 5 6 

4 wird durch continue übersprungen, und die Schleife stoppt vor der Ausgabe von 7 wegen break. Erfahre mehr im Kapitel break und continue.

Wann for vs. andere Schleifen verwenden

  • Verwende for, wenn du die Anzahl der Iterationen im Voraus kennst oder einen Zähler / Index benötigst.
  • Verwende foreach, um über die Elemente eines Arrays oder Objekts zu iterieren, ohne einen Index zu verwalten.
  • Verwende while, wenn du schleifst, bis sich eine Bedingung ändert, und es keinen natürlichen Zähler gibt.
  • Verwende do...while, wenn der Körper mindestens einmal ausgeführt werden muss, bevor die Bedingung geprüft wird.

Fazit

Die for-Schleife ist eine wesentliche Kontrollstruktur in PHP, um Code eine bekannte Anzahl von Malen zu wiederholen. Beherrsche ihre drei Teile — Initialisierung, Bedingung und Inkrement — und du kannst hoch- oder runterzählen, in beliebigen Schritten vorgehen, Arrays nach Index durchlaufen und Schleifen verschachteln, um Raster zu erstellen. Für elementweise Array-Iteration bevorzuge foreach; für unbegrenzte Wiederholungen greife auf while zurück.

Übungen

Übung
Was sind in PHP die drei Ausdrücke einer 'for'-Schleife, in der richtigen Reihenfolge?
Was sind in PHP die drei Ausdrücke einer 'for'-Schleife, in der richtigen Reihenfolge?
Was this page helpful?