foreach Schleife in Php
Sie befinden sich: Home > Php
> foreach Schleife in Php
Die PHP Funktion 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 iterativen Funktion.
Eine foreach(); Schleife kann ausschließlich auf Arrays angewendet werden, eine
Anwendung auf Integer oder Charakterstrings, oder allgemein anderen Variablen führt zu
Fehlern. PHP stellt zwei Arten der foreach(); Schleife zu 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 Funktion der foreach(); Schleife gleicht grundsätzlich der ersten, jedoch
wird nicht der Feldinhalt, sondern der Feldname an die Variabel $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.
Sollte das Array vor dem Aufruf einer foreach(); Schleife bereits referenziert worden sein,
ist zu beachten, dass foreach(); selbst nur auf die Kopie zugreift, und das Orginal auf
diese Weise nicht verändert werden kann. (Um beide Arrays sowohl das Original als auch
die Referenz verändern zu können, muss der Befehl each(); verwendet werden (siehe
das Beispiel für die Möglichkeit while – Schleifen durch foreach(); zu
ersetzen).
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_eins as $key =>$wert_3) {
echo $wert_3; // 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 als while(), das folgende Beispiel zeigt, wie man eine while –
Schleife durch eine foreach(); Schleife ersetzen kann
<?php
/**
* reset(); muss ausgeführt werden
* damit der interne Zeiger auf das erste
*/
reset($feld);
/**
* Element gesetzt wird.
*/
while(list($key, $wert) = each($feld)){
$feld[$key] = $wert + 1;
}
?>
Obwohl es funktionale Unterschiede gibt, verhält sich das folgende Beispiel wie das oben
aufgeführte, ist jedoch erheblich schneller.
<?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.
Unterstützt foreach ein @-Fehlerunterdrückung und wie kann ich eine Fehlermeldung
abfangen?
Nein, foreach unterstützt keine @-Fehlerunterdrückung. Um eine Fehlermeldung
abzufangen, können Sie einen try-catch-Block verwenden, um
die Ausnahme zu behandeln und entsprechend zu reagieren.
Beispiel:
<?php
try {
foreach ($array as $element) {
// Code hier ausführen
}
} catch (Exception $e) {
echo 'Es ist ein Fehler aufgetreten: ' . $e->getMessage();
}
?>
Erklärung:
Im obigen Beispiel wird der Code in einem foreach-Schleifenblock ausgeführt. Wenn ein
Fehler auftritt, wird die Exception $e gefangen und die entsprechende Fehlermeldung
ausgegeben.
weiter while-Schleife und do-while-Schleife
|