each()
PHP each() gab das aktuelle Schlüssel-Wert-Paar zurück und verschob den Array-Zeiger. In 7.2 veraltet, in 8.0 entfernt. Alternativen mit foreach.
Einführung
Die Funktion each() wurde historisch verwendet, um ein array Element für Element zu durchlaufen. Sie gab das aktuelle Schlüssel-Wert-Paar zurück und bewegte den internen Zeiger des Arrays weiter. Sie ermöglichte ein einst verbreitetes while-Schleifenmuster zur Array-Iteration, bevor foreach zum Standard wurde.
Wichtig:
each()wurde in PHP 7.2 als veraltet markiert und in PHP 8.0 vollständig entfernt. Ein Aufruf in PHP 8+ führt zu einem fatalenError. Diese Seite dokumentiert das ursprüngliche Verhalten, damit Sie alten Code lesen und migrieren können — Sie sollten damit jedoch niemals neuen Code schreiben. Springen Sie zu Moderne Alternativen, um zu erfahren, was stattdessen zu verwenden ist.
Diese Seite beschreibt, was each() tat, seine Syntax und die Form des Rückgabewerts, das interne Zeigerverhalten, das es fehleranfällig machte, und wie jede Verwendung mit foreach umgeschrieben werden kann.
Syntax
Die Syntax der Funktion each() ist wie folgt:
Syntax der Each()-Funktion in PHP
each(array $array): array|falseDie Funktion each() nimmt ein array als Parameter entgegen und gibt ein array oder false bei einem Fehler zurück.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
$array | array (per Referenz) | Das array, aus dem gelesen und dessen Zeiger weitergesetzt wird. Funktioniert sowohl mit indizierten als auch mit assoziativen arrays. |
Das array wird per Referenz übergeben, da each() es verändert — es bewegt den internen Zeiger des Arrays bei jedem Aufruf vorwärts.
Rückgabewert
Bei jedem Aufruf gibt each() ein array mit vier Elementen zurück, wobei sowohl numerische als auch string-Schlüssel auf dieselben Daten zeigen:
| Index | Enthält |
|---|---|
0 | den aktuellen Schlüssel |
key | denselben Wert wie 0 |
1 | den aktuellen Wert |
value | denselben Wert wie 1 |
Sobald der Zeiger das letzte Element passiert hat, gibt each() false zurück — das ist es, was die klassische while-Schleife beendet.
Verwendung
Das klassische Idiom kombinierte each() mit einer while-Schleife. Jede Iteration holte ein Paar und bewegte den Zeiger weiter; wenn keine Paare mehr vorhanden waren, gab each() false zurück und die Schleife endete.
Legacy-each()-Schleife (PHP 7.x und früher)
<?php
// Legacy PHP 7.x example. This will throw a fatal Error in PHP 8.0+.
$array = ["one" => 1, "two" => 2, "three" => 3];
while ($element = each($array)) {
echo $element['key'] . ' => ' . $element['value'] . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3Wir definieren ein assoziatives array und rufen dann each() wiederholt in einer while-Schleife auf. Jeder Aufruf gibt das aktuelle Paar zurück (zugänglich als $element['key'] / $element['value']) und bewegt den Zeiger weiter, bis each() schließlich false zurückgibt.
Das Problem mit dem internen Zeiger
Da each() den internen Zeiger verbraucht, kann ein array nur einmal vollständig durchlaufen werden. Um ein zweites Mal zu iterieren, musste man zuerst reset() aufrufen, um den Zeiger an den Anfang zurückzusetzen. Das Vergessen dieses Schritts war eine häufige Quelle von "meine Schleife tut nichts"-Fehlern — und ein Grund, warum each() schließlich zugunsten von foreach entfernt wurde, das seinen eigenen Iterator verwendet und das array nie beeinflusst.
Modernes PHP 8+-Äquivalent
Das gesamte while (each())-Muster lässt sich in ein einziges, übersichtlicheres foreach umschreiben:
<?php
$array = ["one" => 1, "two" => 2, "three" => 3];
foreach ($array as $key => $value) {
echo $key . ' => ' . $value . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3foreach ist kürzer, berührt den internen Zeiger nicht (das array bleibt also wiederverwendbar) und ist die einzige der beiden Varianten, die unter PHP 8+ läuft.
each() vs. ähnliche Array-Funktionen
each() wird oft mit anderen Iterations-Werkzeugen in Verbindung gebracht, aber jedes davon macht etwas Eigenes:
| Funktion | Was sie tut | Gibt ein Schlüssel-Wert-Paar zurück? | Berührt den internen Zeiger? |
|---|---|---|---|
foreach | Sprachkonstrukt zum Durchlaufen aller Elemente | Ja (as $key => $value) | Nein |
array_walk() | Wendet einen Callback auf jedes Element an, in-place | Nein | Nein |
array_map() | Erstellt ein neues array aus den Ergebnissen eines Callbacks | Nein | Nein |
current() / next() / key() | Liest das Element am Zeiger / setzt ihn weiter / liest seinen Schlüssel | Teilweise (getrennt) | Ja (next()) |
Wenn Sie die manuelle Zeigersteuerung benötigen, die each() einst bot, kombinieren Sie current(), key(), next() und reset() — diese Funktionen sind in PHP 8+ weiterhin verfügbar.
Legacy-Status & moderne Alternativen
Die Funktion each() ist veraltet (PHP 7.2) und entfernt (PHP 8.0). Für jeden neuen Code gilt:
- Ein array iterieren? Verwenden Sie
foreach. - Werte in ein neues array umwandeln? Verwenden Sie
array_map(). - Elemente in-place verändern? Verwenden Sie
array_walk(). - Manuelles Durchlaufen nötig? Verwenden Sie
current()+next()+reset().
Fazit
each() war einst die bevorzugte Methode, um ein array zu durchlaufen und Schlüssel-Wert-Paare abzurufen. Die Abhängigkeit vom internen Zeiger machte es jedoch fehleranfällig, und PHP 8.0 hat es vollständig entfernt. Betrachten Sie es als historisches Wissen: Erkennen Sie es in Legacy-Code und ersetzen Sie es durch foreach — das sicherer, schneller und der moderne Standard ist.