PHP foreach: Arrays mit Schlüssel-Wert durchlaufen
PHP foreach ist die idiomatische Art, ein Array oder ein Objekt zu durchlaufen, das Traversable implementiert, ohne manuelle Index-Verwaltung. Nutze foreach ($array as $key => $value), wenn du bei jedem Durchlauf den Schlüssel und den Wert brauchst. Für In-Place-Updates iterierst du per Referenz (&$value) und setzt die Schleifenvariable danach mit unset() zurück, damit keine versehentlichen Überschreibungen entstehen.
PHP foreach Beispiel Für Schlüssel-Wert-Iteration
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
apfel: $1.2
brot: $2.5
milch: $0.99
So Funktioniert Dieses Beispiel
$preiseist ein assoziatives Array, das Produktnamen auf Preise abbildet.foreach ($preise as $artikel => $preis)weist bei jedem Durchlauf den aktuellen Schlüssel$artikelund den aktuellen Wert$preiszu. Ein manueller Index odercount()ist nicht nötig.- Jede Iteration gibt das Schlüssel-Wert-Paar aus.
foreachfunktioniert mit indizierten und assoziativen Arrays mit derselben Syntax.
Häufige Fehler Mit PHP foreach
unset() nach einer Schleife per Referenz vergessen
Falsch:
foreach ($elemente as &$element) {
$element = strtoupper($element);
}
foreach ($elemente as $element) {} // überschreibt das letzte Element
Richtig:
foreach ($elemente as &$element) {
$element = strtoupper($element);
}
unset($element);
Nach einem foreach per Referenz zeigt die Schleifenvariable weiterhin auf das letzte Element. Wenn du die Variable erneut nutzt, kann das letzte Element verändert werden statt nur des lokalen Schleifenwerts.
Erwarten, dass Schleifen per Wert das Array ändern
Falsch:
foreach ($preise as $preis) {
$preis *= 1.10; // ändert eine Kopie, nicht das Array
}
Richtig:
foreach ($preise as &$preis) {
$preis *= 1.10;
}
unset($preis);
Bei Iteration per Wert enthält jede Variable $preis nur eine Kopie des Elements. Änderungen an dieser Kopie erreichen das ursprüngliche Array nie.
PHP foreach vs for-Schleife
| foreach | for |
|---|---|
| Keine Indexvariable nötig. Das ist sauberer für vollständige Durchläufe. | Sinnvoll, wenn du Index-Rechnung, Schrittweite oder Rückwärtsiteration brauchst. |
Funktioniert mit assoziativen Arrays und Traversable-Objekten. | Funktioniert nur mit numerischen Indizes; für assoziative Schlüssel brauchst du array_keys(). |
| Weniger praktisch für feste Schrittweiten (z. B. jedes zweite Element). | Natürliche Wahl für $i += 2 oder Rückwärtszählen. |
Nutze foreach für normale vollständige Durchläufe über ein Array. Wechsle zu for, wenn der Schleifenrumpf von numerischen Positionen oder nicht sequenziellem Zugriff abhängt.
FAQ
Wie bekommt man in einer PHP-foreach-Schleife sowohl Schlüssel als auch Wert?
Nutze die Syntax $key => $value: foreach ($array as $key => $value). So werden bei jeder Iteration sowohl der PHP-foreach-Schlüssel ($key) als auch der Wert ($value) zugewiesen, bei indizierten und assoziativen Arrays. Wenn du nur Werte brauchst, nutze foreach ($array as $value).
Kann foreach Objekte iterieren oder nur Arrays?
foreach funktioniert mit jedem Wert, der das Interface Traversable implementiert, einschließlich Implementierungen von Iterator und IteratorAggregate. Bei normalen Objekten iteriert es über sichtbare Eigenschaften je nach Scope: innerhalb der Klasse über alle Eigenschaften, von außen nur über public-Eigenschaften.
Was ist der Unterschied zwischen foreach und array_map in PHP?
foreach ist eine Kontrollstruktur, die für jedes Element einen Block ausführt und Seiteneffekte wie echo oder ein frühes break erlaubt. array_map wendet einen Callback an und gibt ein neues Array zurück. Nutze array_map, wenn du ein neues Array ohne Mutationen erzeugen willst.