W3docs

for

PHP for-Schleife verstehen: Initialisierung, Bedingung, Inkrement, Array-Iteration, verschachtelte Schleifen und Off-by-one-Fehler vermeiden.

Die PHP for-Schleife

for ist PHPs zählergesteuerte Schleife. Sie wird verwendet, wenn man genau weiß — oder berechnen kann — wie oft ein Codeblock ausgeführt werden soll, z. B. beim Iterieren von 0 bis count($array) - 1, beim Herunterzählen oder beim Springen in Schritten. Diese Seite behandelt die drei Teile des Schleifenkopfs, wie jeder davon ausgeführt wird, wie man arrays iteriert, unendliche und verschachtelte Schleifen, die alternative endfor-Syntax und die Off-by-one-Fehler, die die meisten Anfänger erwischen.

Wenn Sie stattdessen über jedes Element eines arrays oder objects gehen möchten, ohne einen Index zu verwalten, ist foreach in der Regel das bessere Werkzeug. Für eine Schleife, die läuft, bis eine Bedingung falsch wird, siehe while. Ein allgemeiner Vergleich aller Schleifentypen findet sich unter PHP Loops.

Syntax

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

Der Kopf hat drei Ausdrücke, durch Semikolons getrennt:

AusdruckWann er ausgeführt wirdTypische Verwendung
initializationEinmal, bevor die Schleife startetEinen Zähler einrichten, z. B. $i = 0
conditionVor jeder IterationSchleife läuft weiter, solange er truthy ist
incrementNach jeder IterationDen Zähler weiterschalten, z. B. $i++

Die Ausführungsreihenfolge ist: initialization ausführen, condition auswerten; wenn sie wahr ist, den Rumpf ausführen, dann increment ausführen, dann condition erneut auswerten, und so weiter. In dem Moment, in dem condition false ergibt, stoppt die Schleife und der Rumpf wird in diesem letzten Durchlauf nicht ausgeführt.

Ein erstes Beispiel

<?php

for ($i = 1; $i <= 5; $i++) {
  echo $i . PHP_EOL;
}
// Output:
// 1
// 2
// 3
// 4
// 5

Der Zähler beginnt bei 1. Nach der Ausgabe von 5 macht $i++ daraus 6, 6 <= 5 ist false, und die Schleife endet — sie läuft also genau fünf Mal.

„Probier es selbst" ist für dieses Beispiel nicht verfügbar.

Über ein Array iterieren

Eine klassische Verwendung von for ist das Indizieren in ein array. count() in einer Variable zwischenspeichern (oder den Inkrement-Slot verwenden), damit PHP das array nicht bei jedem Durchlauf neu zählt:

<?php

$colors = ["red", "green", "blue"];

for ($i = 0, $n = count($colors); $i < $n; $i++) {
  echo $colors[$i] . PHP_EOL;
}
// Output:
// red
// green
// blue

Beachten Sie, dass array-Indizes bei 0 beginnen, sodass der letzte gültige Index count($colors) - 1 ist. Die Bedingung verwendet < (nicht <=) genau deshalb — die Verwendung von <= würde ein Element über das Ende hinaus lesen. Wenn Sie nur die Werte und nicht den Index benötigen, bevorzugen Sie foreach, das diese ganze Klasse von Off-by-one-Fehlern vermeidet.

Herunterzählen und Schritte

Der Inkrement-Ausdruck ist nur Code — er kann dekrementieren oder um einen beliebigen Betrag springen:

<?php

// Count down
for ($i = 5; $i >= 1; $i--) {
  echo $i . " ";
}
echo PHP_EOL;
// Output: 5 4 3 2 1

// Step by 2 (even numbers only)
for ($i = 0; $i <= 10; $i += 2) {
  echo $i . " ";
}
// Output: 0 2 4 6 8 10

Mehrere Ausdrücke und leere Slots

Jeder der drei Slots kann mehrere kommagetrennte Ausdrücke enthalten, und ein Slot kann leer gelassen werden. Die Semikolons sind auch bei leeren Slots erforderlich:

<?php

// Two counters moving toward each other
for ($i = 0, $j = 10; $i < $j; $i++, $j--) {
  echo "$i-$j" . PHP_EOL;
}
// Output:
// 0-10
// 1-9
// 2-8
// 3-7
// 4-6

Wenn der Bedingungsslot leer ist, wird er als true behandelt, was eine unendliche Schleife ergibt. Die Schleife wird dann von innen mit break beendet:

<?php

$i = 0;
for (;;) {
  if ($i >= 3) {
    break;
  }
  echo $i . PHP_EOL;
  $i++;
}
// Output:
// 0
// 1
// 2

Verwenden Sie continue, um den Rest der aktuellen Iteration zu überspringen und direkt zum Inkrement-Schritt zu springen.

Verschachtelte Schleifen

Das Platzieren einer for-Schleife innerhalb einer anderen ermöglicht die Arbeit mit Gittern, Tabellen und multiplikationsähnlichen Mustern. Verwenden Sie für jede Ebene unterschiedliche Zählernamen:

<?php

for ($row = 1; $row <= 3; $row++) {
  for ($col = 1; $col <= 3; $col++) {
    echo ($row * $col) . "\t";
  }
  echo PHP_EOL;
}
// Output:
// 1	2	3
// 2	4	6
// 3	6	9

Die innere Schleife durchläuft alle ihre Iterationen für jeden einzelnen Durchlauf der äußeren Schleife.

Alternative endfor-Syntax

PHP bietet eine Doppelpunkt-/endfor-Form, die beim Mischen von Schleifen mit HTML in Templates praktisch ist, da sie schwebende schließende geschweifte Klammern vermeidet:

<?php for ($i = 1; $i <= 3; $i++): ?>
  <p>Item <?= $i ?></p>
<?php endfor; ?>

Dies rendert drei <p>-Absätze. Die gleiche alternative Syntax existiert für foreach/endforeach.

Häufige Fallstricke

  • Off-by-one-Fehler. $i <= count($arr) liest einen Slot über das Ende hinaus (eine Warnung über einen undefinierten Index); verwenden Sie $i < count($arr).
  • Ändern der Array-Länge innerhalb der Schleife. Wenn der Rumpf Elemente hinzufügt oder entfernt, kann ein zwischengespeichertes count() veralten — erneut prüfen oder zu foreach wechseln.
  • Versehentliche unendliche Schleifen. Das Vergessen des Inkrements oder das Vergleichen in der falschen Richtung (z. B. $i-- mit $i < 10) bedeutet, dass die Bedingung nie false wird.
  • Gleitkommazähler. Das Schrittweise Vorgehen um 0.1 akkumuliert Rundungsfehler und kann die Grenze überschreiten; besser mit Ganzzahlen schleifen und innerhalb des Rumpfs dividieren.

Wann for verwenden

Verwenden Sie for, wenn die Anzahl der Iterationen im Voraus bekannt oder berechnet ist und der Index wirklich gebraucht wird (Countdowns, feste Wiederholung, Schritte, Tabellen aufbauen). Wenn Sie einfach jedes Element einer Collection möchten, ist foreach sauberer und sicherer. Wenn die Anzahl der Wiederholungen von einer Bedingung abhängt, die sich innerhalb der Schleife ändert, verwenden Sie while oder do...while.

Übung

Übung
Wofür wird die 'for'-Schleife in PHP verwendet?
Wofür wird die 'for'-Schleife in PHP verwendet?
Was this page helpful?