W3docs

foreach

Das Schlüsselwort "foreach" ist ein Schleifenkonstrukt in PHP zum Iterieren über Arrays und Objekte.

Die PHP-foreach-Schleife

foreach ist PHPs dedizierte Schleife zum Iterieren über Arrays und Objekte. Im Gegensatz zu einer for-Schleife benötigt sie weder einen Zähler noch einen Index — sie durchläuft automatisch jedes Element, eines nach dem anderen, was sie zur häufigsten und fehlerunanfälligsten Methode macht, eine Sammlung in PHP zu verarbeiten.

Dieses Kapitel behandelt die zwei foreach-Formen, das Iterieren per Referenz, das Entpacken verschachtelter Arrays mit list(), den häufigsten Fallstrick und wann man foreach gegenüber den anderen PHP-Schleifen bevorzugen sollte.

Syntax

foreach hat zwei Formen.

Nur Wert — wenn nur der Wert jedes Elements benötigt wird:

foreach ($array as $value) {
  // do something with $value
}

Schlüssel und Wert — wenn auch der Array-Schlüssel benötigt wird (unverzichtbar bei assoziativen Arrays):

foreach ($array as $key => $value) {
  // do something with $key and $value
}

Bei jedem Durchlauf kopiert PHP das aktuelle Element in $value (und dessen Schlüssel in $key) und rückt dann zum nächsten Element vor, bis das Array erschöpft ist.

Iteration über ein indiziertes Array

php— editable, runs on the server

Iteration über ein assoziatives Array

Mit der $key => $value-Form erhält man beide Hälften jedes Paares:

<?php

$person = ["name" => "John", "age" => 30, "city" => "New York"];

foreach ($person as $key => $value) {
  echo $key . ": " . $value . PHP_EOL;
}

// Output:
// name: John
// age: 30
// city: New York

Werte per Referenz ändern

Standardmäßig ist $value eine Kopie, daher wirkt sich eine Änderung innerhalb der Schleife nicht auf das ursprüngliche Array aus. Mit dem Präfix & wird per Referenz iteriert, sodass Änderungen zurückgeschrieben werden:

<?php

$prices = [10, 20, 30];

foreach ($prices as &$price) {
  $price *= 2;          // modifies the array in place
}
unset($price);          // important: break the reference

print_r($prices);

// Output:
// Array
// (
//     [0] => 20
//     [1] => 40
//     [2] => 60
// )

Achtung: Nach einer Referenz-Schleife immer unset($price) aufrufen. Die Variable zeigt noch auf das letzte Element, sodass eine spätere Zuweisung an $price — oder ein zweites foreach, das den gleichen Namen verwendet — das Array stillschweigend beschädigen würde.

Verschachtelte Arrays mit list() entpacken

Wenn jedes Element selbst ein Array ist, kann es inline mit list() (oder der Kurzschreibweise [] ab PHP 7.1+) destrukturiert werden:

<?php

$points = [[1, 2], [3, 4], [5, 6]];

foreach ($points as [$x, $y]) {
  echo "x=$x, y=$y" . PHP_EOL;
}

// Output:
// x=1, y=2
// x=3, y=4
// x=5, y=6

Wann foreach verwenden?

  • foreach verwenden für jedes Array oder Iterable, bei dem alle Elemente durchlaufen werden sollen — es ist die klarste Wahl und kann nicht über das Ende des Arrays hinauslaufen.
  • Eine for-Schleife verwenden, wenn eine genaue Kontrolle über den Zähler benötigt wird (überspringen, in 2er-Schritten zählen, rückwärts zählen).
  • while verwenden, wenn die Anzahl der Iterationen nicht im Voraus bekannt ist und von einer Bedingung abhängt.

Eine foreach-Schleife kann auch frühzeitig mit break beendet oder eine Iteration mit continue übersprungen werden, genauso wie in anderen Schleifen.

Übung

Übung
Was ist der Hauptzweck der foreach-Schleife in PHP basierend auf https://www.w3docs.com/learn-php/foreach.html?
Was ist der Hauptzweck der foreach-Schleife in PHP basierend auf https://www.w3docs.com/learn-php/foreach.html?
Was this page helpful?