foreach Schleife in Php
Sie befinden sich: Home > Php
> foreach Schleife in Php
Das PHP-Sprachkonstrukt foreach stellt eine einfache und schnelle Lösung dar, wenn jedes
Element eines Arrays überprüft
oder verändert werden soll. Man spricht hierbei auch von einer Iteration.
Eine foreach-Schleife kann ausschließlich auf Arrays und Objekte angewendet werden, eine
Anwendung auf Integer oder Charakterstrings, oder allgemein anderen Variablen führt zu
Fehlern. PHP stellt zwei Arten der foreach-Schleife zur Verfügung, wobei die zweite
Variante etwas ungewöhnlicher, jedoch gelegentlich zum Einsatz kommt.
foreach (array as $wert) Ausdruck (z. B. echo $wert;)
foreach (array as $key => $wert) Ausdruck (z. B. echo $wert;)
Die erste Funktion schreibt bei jedem Durchlauf des Arrays das aktuelle Element in die Variable $wert, und
inkrementiert (erhöhen um eins) den internen Zeiger auf das Array um eins, um auf das nächste
Element zugreifen zu können.
Die zweite Variante der foreach-Schleife gleicht grundsätzlich der ersten, jedoch
wird zusätzlich zum Feldinhalt auch der Feldname (Schlüssel) an die Variable $key übergeben. Dies
ist dann sinnvoll, wenn es sich um ein Array mit assoziativen Feldindizes
handel.
Der interne Zeiger auf das entsprechende Array wird beim Aufruf von foreach(); automatisch
auf das erste Element gesetzt, so, dass ein zusätzlicher Aufruf von reset(); entfallen
kann.
Seit PHP 7 arbeitet foreach direkt auf dem Original-Array, wenn &$wert verwendet wird.
Möchte man Werte im Array ändern, verwendet man die Referenz-Schreibweise
(foreach ($array as &$wert)), wie im folgenden Beispiel gezeigt.
Das folgende Beispiel erläutert die grundlegende Funktionsweise:
<?php
$feld_eins = array(1, 2, 3, 4);
/**
* Das & Zeichen vor $wert muss verwendet
* werden damit der Wert des Elements verändert
* werden kann.
**/
foreach ($feld_eins as &$wert) {
$wert = $wert * 2;
}
/**
* $feld_eins hat nun folgenden Inhalt (2, 4, 6, 8)
**/
/**
* Ein weiteres Beispiel dieses Mal
* für ein zweidimensionales Array
**/
$feld_zwei = array();
/**
* eine für PHP ungewöhnliche
* Zuweisung für Felder eines Arrays
**/
$feld_zwei[0][0] = "a";
$feld_zwei[0][1] = "b";
$feld_zwei[1][0] = "y";
$feld_zwei[1][1] = "z";
foreach ($feld_zwei as $wert1) {
foreach ($wert1 as $wert2) {
echo $wert2;
}
}
/**
* für assoziative Arrays, die Ausgabe
* bezieht sich hier auf die Indizes z.B. "a"
**/
$feld_drei = array("a"=>"1","b"=>"2", "c"=>"3","d"=>"4");
foreach ($feld_drei as $key =>$wert_3) {
echo $key; // abcd
}
?>
Erklärung:
Mithilfe des Schlüsselwortes „foreach“ können wir durch ein Array
gehen. Wir können einen bestimmten Wert auslesen oder aber auch verändern. Im
ersten Beispiel haben wir ein eindimensionales Array namens „$feld_eins“ mit den
Werten (1,2,3,4). Dann haben wir den Befehl „foreach“ verwendet, um jeden Wert
im Array zu verdoppeln. Damit der Wert des Elements verändert werden kann, müssen
wir ein &-Zeichen vor $wert setzen. Nachdem wir den Befehl ausgeführt haben, hat
das Array den Inhalt (2,4,6,8).
Im zweiten Beispiel haben wir ein zweidimensionales Array namens „$feld_zwei“.
Hier haben wir eine für PHP ungewöhnliche Zuweisung verwendet, indem wir die Werte
des Arrays direkt zugewiesen haben. Der Inhalt dieses Arrays ist: ("a", "b", "y", "z"). Wir
haben wieder den Befehl „foreach“ verwendet, um jeden Wert im Array auszulesen
und auf dem Bildschirm auszugeben.
Im dritten Beispiel haben wir ein assoziatives Array namens „$feld_drei“. Da es
sich hierbei um ein assoziatives Array handelt, steht der Schlüssel neben dem Wert. Der
Inhalt des Arrays ist: ("a"=>"1", "b"=>"2", "c"=>"3", "d"=>"4"). Auch hier wurde
wieder der Befehl „foreach“ verwendet, um jeden Wert im Array auszulesen und auf
dem Bildschirm auszugeben.
foreach ist schneller und einfacher als eine vergleichbare while-Schleife. Das folgende Beispiel
zeigt die empfohlene Vorgehensweise mit foreach:
Hinweis: Die früher verwendete Kombination aus while(), list() und each() ist
seit PHP 8.0 nicht mehr verfügbar, da each() entfernt wurde. Verwenden Sie stattdessen
immer foreach:
<?php
/**
* der interne Zeiger wird automatisch durch den Aufruf auf
* das erste Element gesetzt
**/
foreach($feld as $key => $wert){
$feld[$key] = $wert + 1;
}
?>
Man sollte vor dem Ausführen einer foreach Schleife, die Variable mit dem PHP Befehl is_array()
prüfen, da ansonsten eine Fehlermeldung ausgegeben wird, wenn die Variable kein Array
ist.
Fehlerbehandlung bei foreach
Seit PHP 8.0 wirft foreach einen TypeError, wenn die
übergebene Variable kein Array und kein Traversable-Objekt ist.
Dieser Fehler kann mit einem try-catch-Block gefangen werden:
<?php
try {
foreach ($daten as $element) {
// Code hier ausführen
}
} catch (\TypeError $e) {
echo 'Fehler: ' . $e->getMessage();
}
?>
Empfohlene Vorgehensweise: Prüfen Sie die Variable vor dem
foreach-Aufruf mit is_iterable() oder is_array(),
anstatt Fehler erst zur Laufzeit abzufangen:
<?php
if (is_iterable($daten)) {
foreach ($daten as $element) {
// Code hier ausführen
}
}
?>
weiter while-Schleife und do-while-Schleife
|