current()
Die Funktion current() in PHP liest den Wert am internen Zeiger eines Arrays, ohne ihn zu verschieben – Erklärung, Beispiele und wichtige Hinweise.
Einführung
Jedes PHP-array besitzt einen internen Zeiger – einen verborgenen Cursor, der ein Element als das „aktuelle" markiert. Die Funktion current() liest den Wert an diesem Cursor, ohne ihn zu verschieben. Damit ist current() die lesende Hälfte von PHPs manuellem Array-Traversierungs-Werkzeugkasten und das Gegenstück zu den Navigationsfunktionen next(), prev(), reset() und end().
Dieses Kapitel erklärt genau, was der interne Zeiger ist, wie sich current() an den Rändern eines Arrays verhält und welche Fallstricke man kennen sollte, bevor man die Funktion einsetzt.
Was ist die Funktion current() in PHP?
current() gibt den Wert des Elements zurück, auf dem der interne Zeiger des Arrays gerade steht. Der Zeiger wird nicht weitergerückt – wiederholtes Aufrufen liefert denselben Wert, solange nichts anderes den Cursor bewegt.
Wird ein neues array erstellt, steht der Zeiger auf dem ersten Element. Die Funktionen, die ihn bewegen, sind:
next()— Zeiger ein Element vorwärts bewegen und diesen Wert zurückgeben.prev()— Zeiger ein Element zurückbewegen und diesen Wert zurückgeben.reset()— zum ersten Element springen.end()— zum letzten Element springen.
current() ist die einzige dieser Funktionen, die liest, ohne zu bewegen.
Syntax der Funktion current()
current(array $array): mixedSie nimmt ein einzelnes Argument – das zu prüfende array – und gibt den Wert an der aktuellen Zeigerposition zurück, oder false, wenn das array leer ist oder der Zeiger über das letzte Element hinaus gerutscht ist.
Achtung: Da
current()am Ende eines Arraysfalsezurückgibt, kann man mit ihr nicht das Ende eines Arrays erkennen, das tatsächlich einenfalse-Wert enthält. Verwende in diesem Fallkey(), das nach dem Endenullzurückgibt, wenn du eine zuverlässige Ende-Prüfung benötigst.
Grundlegendes Beispiel
Der Zeiger steht auf dem ersten Element, daher wird apple ausgegeben. Ruft man current() noch zehnmal auf, erhält man immer noch apple – der Cursor wurde nicht bewegt.
Den Zeiger mit next() und prev() verschieben
current() wird in Kombination mit den Navigationsfunktionen nützlich. Jede von ihnen positioniert den Cursor neu, und current() (oder der von der Funktion selbst zurückgegebene Wert) zeigt, wo man gelandet ist.
<?php
$fruits = ['apple', 'banana', 'cherry'];
echo current($fruits) . "\n"; // apple (pointer at index 0)
next($fruits);
echo current($fruits) . "\n"; // banana (pointer at index 1)
next($fruits);
echo current($fruits) . "\n"; // cherry (pointer at index 2)
prev($fruits);
echo current($fruits) . "\n"; // banana (pointer back at index 1)
reset($fruits);
echo current($fruits) . "\n"; // apple (pointer reset to start)Die Ausgabe lautet:
apple
banana
cherry
banana
appleWas passiert am Ende des Arrays
Rückt der Zeiger über das letzte Element hinaus, gibt current() false zurück:
<?php
$fruits = ['apple', 'banana', 'cherry'];
end($fruits); // pointer on the last element
echo current($fruits) . "\n"; // cherry
next($fruits); // step beyond the last element
var_dump(current($fruits)); // bool(false)Ausgabe:
cherry
bool(false)Deshalb ist der obige Hinweis wichtig: Ein false von current() kann bedeuten „nach dem Ende" oder „der Wert des Elements ist wirklich false".
current() und foreach
Eine häufige Überraschung: foreach iteriert über ein array ohne seinen internen Zeiger zu nutzen oder zu bewegen. current() wird daher durch eine foreach-Schleife nicht beeinflusst und spiegelt weiterhin das wider, was die zeigerbewegenden Funktionen zuletzt gesetzt haben.
<?php
$fruits = ['apple', 'banana', 'cherry'];
foreach ($fruits as $fruit) {
// looping does not touch the internal pointer
}
echo current($fruits); // apple — still at the startDies gibt apple aus, nicht false. Wenn du die Position manuell steuern möchtest, verwende next()/current(); wenn du einfach jedes Element besuchen möchtest, verwende foreach.
Wann sollte man current() verwenden?
Greife zu current(), wenn du ein zustandsbehaftetes Durchwandern eines Arrays benötigst – also wenn du den Cursor über mehrere Funktionsaufrufe oder Schleifeniterationen hinweg vorwärts bewegst und einen Blick auf das aktive Element werfen möchtest. Typische Anwendungsfälle:
- Verarbeitung eines queue-artigen Arrays unter Verwendung von
next()undprev(). - Einfaches Lesen des ersten Elements:
current($array)liefert den ersten Wert, ohne den Schlüssel zu kennen. - Implementierung eines benutzerdefinierten Cursors über einen Datensatz.
Für die alltägliche Iteration bevorzuge foreach – es ist klarer und immun gegen Zeiger-Überraschungen.
Fazit
current() liest den Wert am internen Zeiger eines Arrays, ohne ihn zu verschieben, und ist damit die lesende Hälfte von PHPs manuellem Traversierungs-Set neben next(), prev(), reset() und end(). Zu beachten sind zwei Grenzfälle: Die Funktion gibt denselben Wert zurück, bis etwas anderes den Cursor bewegt, und sie gibt false nach dem Ende des Arrays zurück – verwende daher key(), wenn du das Ende zuverlässig erkennen möchtest.