W3docs

next()

Erfahren Sie, wie PHP's next() den internen Zeiger eines Arrays vorwärts bewegt, das nächste Element oder false am Ende zurückgibt und mit reset(), current() und prev() zusammenarbeitet.

Einführung

Jedes PHP-Array besitzt einen internen Zeiger, der ein Element als „aktuell" markiert. Eine kleine Gruppe von Funktionen bewegt diesen Zeiger, ohne dass Sie selbst eine Schleife schreiben müssen: reset(), current(), prev(), end() und next(). Dieser Artikel konzentriert sich auf next() — was die Funktion zurückgibt, wie sie den Zeiger verändert und welche Fallstricke es zu beachten gilt.

Was die Funktion next() tut

next() rückt den internen Zeiger des Arrays um eine Position vor und gibt den Wert des Elements zurück, auf dem er landet. Die Signatur lautet:

next(array &$array): mixed

Aus dieser Signatur ergeben sich einige Punkte:

  • Das Array wird als Referenz übergeben (&$array). next() gibt kein neues Array zurück — es verändert den Zeiger des übergebenen Arrays direkt.
  • Es gibt den Wert des nächsten Elements zurück, nicht des aktuellen. Wenn Sie das Element unter dem Zeiger lesen möchten, ohne ihn zu bewegen, verwenden Sie current().
  • Am Ende des Arrays gibt es false zurück und lässt den Zeiger hinter dem letzten Element stehen. Erneutes Aufrufen von next() gibt weiterhin false zurück.

Beim Start eines Skripts liegt der Zeiger auf dem ersten Element, sodass das allererste next() bereits das zweite Element zurückgibt — nicht das erste. Das ist die häufigste Quelle von „Off-by-one"-Verwechslungen bei next().

Einfaches Beispiel

<?php

$fruits = ['apple', 'banana', 'cherry'];

echo current($fruits) . "\n"; // pointer starts on the first element
echo next($fruits) . "\n";    // move forward, return the second
echo next($fruits) . "\n";    // move forward, return the third
var_dump(next($fruits));      // past the end -> false

Die Ausgabe lautet:

apple
banana
cherry
bool(false)

current() liest das erste Element, ohne den Zeiger zu bewegen; anschließend rückt jedes next() um ein Element vor. Der letzte Aufruf geht über das Ende des Arrays hinaus und gibt false zurück.

Ein Array mit next() durchlaufen

Ein gängiges Muster ist, mit reset() zu beginnen (um sicherzustellen, dass der Zeiger am Anfang steht) und dann mit next() zu iterieren, bis false zurückgegeben wird:

<?php

$colors = ['red', 'green', 'blue'];

reset($colors);
echo current($colors) . "\n"; // first element

while (($color = next($colors)) !== false) {
    echo $color . "\n";
}

Ausgabe:

red
green
blue

Beachten Sie den !== false-Vergleich (strenger Vergleich). Das ist wichtig — siehe den nächsten Abschnitt.

Der „Falsy-Wert"-Fallstrick

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 Prüfung wie while (next($array)) hört vorzeitig auf, sobald sie auf einen dieser Werte trifft:

<?php

$data = ['a', 0, 'b'];
reset($data);

// WRONG: stops at the 0, never reaches 'b'
while ($value = next($data)) {
    echo $value . "\n";
}
echo "---\n";

Das gibt nur aus:

---

Die Schleife endet sofort, weil next() den Wert 0 (das zweite Element) zurückgibt, der als falsy gilt. Bei Arrays, die falsy-Werte enthalten können, empfiehlt sich stattdessen foreach, das den internen Zeiger vollständig umgeht, oder die Verwendung von key(), um das tatsächliche Ende zu erkennen:

<?php

$data = ['a', 0, 'b'];
reset($data);

do {
    echo current($data) . "\n";
} while (next($data) !== null && key($data) !== null);

In der Praxis ist ein einfaches foreach das richtige Werkzeug zum Durchlaufen aller Elemente; greifen Sie auf next() nur zurück, wenn Sie wirklich eine manuelle, schrittweise Kontrolle des Zeigers benötigen.

next() und die verwandten Zeigerfunktionen

FunktionBewegt den Zeiger?Gibt zurück
current()NeinElement unter dem Zeiger
next()Ein Schritt vorwärtsNeues aktuelles Element (oder false am Ende)
prev()Ein Schritt zurückNeues aktuelles Element (oder false vor dem Anfang)
reset()Zum ersten ElementErstes Element
end()Zum letzten ElementLetztes Element
key()NeinSchlüssel des aktuellen Elements (oder null hinter dem Ende)

Die Kombination von next() und prev() ermöglicht es, während eines einzelnen Durchlaufs voraus zu schauen und zurückzugehen.

Fazit

Die Funktion next() rückt den internen Zeiger eines Arrays um einen Schritt vor und gibt den Wert zurück, auf dem er landet, oder false, sobald er das Ende überschreitet. Da sie auf dem internen Zeiger basiert und das Ende mit false signalisiert, arbeitet sie natürlich mit reset(), current() und prev() zusammen — achten Sie jedoch auf Arrays mit falsy-Werten, bei denen eine lose Schleifenbedingung zu früh abbricht. Für unkomplizierte Iteration bevorzugen Sie foreach; verwenden Sie next(), wenn Sie explizite Kontrolle über die Position des Zeigers benötigen.

Übung

Übung
Was macht die PHP-Funktion 'next()' gemäß den Informationen auf der Webseite?
Was macht die PHP-Funktion 'next()' gemäß den Informationen auf der Webseite?
Was this page helpful?