Die foreach-Schleife ist der Standardweg, um alle Elemente eines Arrays in PHP durchzugehen. Sie liefert bei jedem Durchlauf wahlweise nur den Wert oder Schlüssel und Wert zusammen. Das macht sie besonders übersichtlich bei assoziativen Arrays.
Nur Werte durchlaufen
In der einfachsten Form gibt foreach bei jedem Durchlauf den Wert des aktuellen Elements zurück:
<?php
$sprachen = ['PHP', 'JavaScript', 'Python'];
foreach ($sprachen as $sprache) {
echo $sprache . '<br>';
}
/* Ausgabe:
PHP
JavaScript
Python */
?>
Die Variable $sprache enthält bei jedem Durchlauf den Wert des nächsten Elements. Der Schlüssel (hier 0, 1, 2) wird nicht benötigt und deshalb weggelassen.
Schlüssel und Wert zusammen ausgeben
Bei assoziativen Arrays sind die Schlüssel oft genauso wichtig wie die Werte. Mit der erweiterten Syntax $key => $value stehen beide zur Verfügung:
<?php
$preise = [
'Laptop' => 899,
'Maus' => 29,
'Tastatur' => 59
];
foreach ($preise as $produkt => $preis) {
echo $produkt . ': ' . $preis . ' EUR<br>';
}
/* Ausgabe:
Laptop: 899 EUR
Maus: 29 EUR
Tastatur: 59 EUR */
?>
Die Variablennamen $produkt und $preis sind frei wählbar. Sprechende Namen machen den Code leichter verständlich als $k und $v.
Praxisbeispiel: HTML-Tabelle erzeugen
Ein typischer Anwendungsfall ist das Erzeugen von HTML-Ausgaben aus Array-Daten:
<?php
$mitarbeiter = [
['name' => 'Anna', 'abteilung' => 'Entwicklung'],
['name' => 'Ben', 'abteilung' => 'Design'],
['name' => 'Clara', 'abteilung' => 'Vertrieb']
];
echo '<table>';
foreach ($mitarbeiter as $index => $person) {
echo '<tr>';
echo '<td>' . ($index + 1) . '</td>';
echo '<td>' . $person['name'] . '</td>';
echo '<td>' . $person['abteilung'] . '</td>';
echo '</tr>';
}
echo '</table>';
?>
Der numerische Index wird hier als Zeilennummer verwendet, und die Werte aus den Unter-Arrays füllen die Tabellenzellen.
Werte innerhalb der Schleife ändern
Normalerweise arbeitet foreach mit einer Kopie des Werts. Um ein Element direkt im Array zu verändern, wird eine Referenz mit & verwendet:
<?php
$preise = [10, 20, 30];
foreach ($preise as &$preis) {
$preis = $preis * 1.19;
}
unset($preis);
print_r($preise);
/* Ausgabe:
Array ( [0] => 11.9 [1] => 23.8 [2] => 35.7 ) */
?>
Das unset($preis) nach der Schleife ist wichtig. Ohne diesen Aufruf bleibt die Referenz auf das letzte Element bestehen, was zu schwer auffindbaren Fehlern führen kann, wenn die Variable später erneut verwendet wird.
Nur Schlüssel oder nur Werte als Array
Wer alle Schlüssel oder alle Werte eines Arrays als separates Array benötigt, kann array_keys() und array_values() verwenden:
<?php
$config = ['host' => 'localhost', 'port' => 3306];
$schluessel = array_keys($config);
// ['host', 'port']
$werte = array_values($config);
// ['localhost', 3306]
?>
Das ist praktisch, wenn Schlüssel und Werte getrennt weiterverarbeitet werden sollen, etwa für Dropdown-Menüs oder Konfigurationstabellen.