next()
Erfahren Sie, wie PHP next() den internen Zeiger eines Arrays vorwärts bewegt, was zurückgegeben wird und wie es mit reset(), current() und prev() zusammenarbeitet.
Die PHP next() Funktion
Jedes PHP-Array besitzt einen internen Zeiger, der ein Element als das „aktuelle" markiert. Die Funktion next() bewegt diesen Zeiger um eine Position vorwärts und gibt den Wert zurück, auf dem er landet. Sie gehört zu einer kleinen Familie von Zeigerfunktionen — reset(), current(), prev() und end() — die es ermöglichen, ein Array schrittweise zu durchlaufen, ohne einen eigenen Indexzähler schreiben zu müssen. Diese Anleitung erklärt genau, was next() zurückgibt, wie es den Zeiger verändert und welche Sonderfälle häufig zu Problemen führen.
Syntax und Rückgabewert
next(array &$array): mixedAus dieser Signatur ergeben sich drei Details:
- Das Array wird als Referenz übergeben (
&$array).next()gibt kein neues Array zurück — es verändert den internen Zeiger des übergebenen Arrays. - Es gibt den Wert des nächsten Elements zurück, nicht den des aktuellen. Um das Element unter dem Zeiger zu lesen, ohne ihn zu bewegen, verwenden Sie
current(). - Am Ende des Arrays gibt es
falsezurück und parkt den Zeiger hinter dem letzten Element. Alle weiteren Aufrufe geben ebenfallsfalsezurück.
Wenn ein Skript ein Array zum ersten Mal verwendet, befindet sich der Zeiger auf dem ersten Element. Der allererste Aufruf von next() gibt daher bereits das zweite Element zurück — eine häufige Quelle von Off-by-one-Fehlern.
Ein einfaches next()-Beispiel
Das folgende Beispiel liest das erste Element mit current() und bewegt den Zeiger anschließend zweimal vorwärts. Der letzte Aufruf geht über das Ende hinaus und gibt false zurück:
Die Ausgabe lautet:
apple
banana
cherry
bool(false)Ein Array mit next() durchlaufen
Ein gängiges Muster ist, zunächst reset() aufzurufen (um sicherzustellen, dass der Zeiger am Anfang steht), das erste Element auszugeben und dann mit next() zu iterieren, bis false zurückgegeben wird:
Dies gibt aus:
red
green
blueBeachten Sie den strikten !== false-Vergleich — der nächste Abschnitt erklärt, warum eine lockere Prüfung gefährlich ist.
Die Falle mit Falsy-Werten
next() gibt false am Ende des Arrays zurück, aber es gibt auch false zurück, wenn der tatsächliche Wert eines Elements false, 0, "" oder null ist. Eine lockere Bedingung wie while (next($array)) stoppt daher, sobald sie auf einen dieser Werte trifft:
Da next() für das zweite Element 0 zurückgibt, wird der Schleifenrumpf nie ausgeführt — die Ausgabe ist lediglich:
doneBei Arrays, die möglicherweise Falsy-Werte enthalten, empfiehlt sich foreach (das den internen Zeiger vollständig ignoriert) oder die Prüfung von key(), das null nur am echten Ende des Arrays zurückgibt.
Wie next() mit den anderen Zeigerfunktionen zusammenhängt
next() arbeitet selten allein. Es ergänzt reset(), current(), prev(), end() und key(), um vollständige manuelle Kontrolle über den Cursor eines Arrays zu ermöglichen:
| Funktion | Bewegt den Zeiger? | Gibt zurück |
|---|---|---|
current() | Nein | Element unter dem Zeiger |
next() | Vorwärts um eins | Neues aktuelles Element (oder false am Ende) |
prev() | Zurück um eins | Neues aktuelles Element (oder false vor dem Anfang) |
reset() | Zum ersten | Erstes Element |
end() | Zum letzten | Letztes Element |
key() | Nein | Schlüssel des aktuellen Elements (oder null am Ende) |
Das folgende Beispiel verwendet end() und prev() zusammen mit next(), um zu zeigen, wie sich der Zeiger in einem Durchlauf in beide Richtungen bewegen kann:
Ausgabe:
30
20
30
10Wann sollte next() verwendet werden?
Für die einfache Iteration über alle Elemente ist eine foreach-Schleife klarer und sicherer — sie stolpert nie über Falsy-Werte. Greifen Sie auf next() nur zurück, wenn Sie wirklich explizite, schrittweise Kontrolle darüber benötigen, wo der Zeiger steht, beispielsweise wenn Sie vorausschauen möchten, während Sie noch in der Mitte einer Schleife sind.
Fazit
Die Funktion next() bewegt den internen Zeiger eines Arrays um einen Schritt vorwärts und gibt den Wert zurück, auf dem er landet; nach dem letzten Element wird false zurückgegeben. Da sie auf dem internen Zeiger basiert und das Ende mit false signalisiert, arbeitet sie Hand in Hand mit reset(), current() und prev() — vergessen Sie dabei nicht die Falle mit Falsy-Werten, bei der eine lockere Schleifenbedingung zu früh abbricht. Verwenden Sie für die alltägliche Iteration foreach; wählen Sie next(), wenn Sie präzise Kontrolle über den Array-Cursor benötigen.