1. Mit array_values() und Zugriff per Schlüssel
Bei einem Array mit Integer-Schlüsseln, die bei 0 beginnen und bis n gehen (0, 1, 2, 3, ...) hat das erste Element immer den Schlüssel 0.
Der Schlüssel des letzten Elements ergibt sich aus (Anzahl der Elemente im Array - 1).
Minus 1, da die Schlüssel bei 0 und nicht bei 1 beginnen.
Die Schlüssel jedes Arrays können auf eine solche aufsteigende Reihenfolge gebracht werden, indem man array_values($array) auf das Array anwendet (die Funktion gibt die Werte im Array mit Schlüssel von 0 bis n zurück).
Zum Auslesen des ersten und des letzten Wertes eines Arrays kann demnach folgender Code verwendet werden:
PHP-Code
<?php $arr = array('eins'=>1, 'zwei'=>2, 'drei'=>3); $arr = array_values($arr); $first = (isset($arr[0])) ? $arr[0] : null; $last = (isset($arr[count($arr)-1])) ? $arr[count($arr)-1] : null; var_dump($first); var_dump($last); ?>
Ausgabe
Es wird isset() verwendet, um zu überprüfen, ob das Array überhaupt mindestens ein Element enthält.int(1) int(3)
Wäre es leer und man würde trotzdem versuchen, auf das erste oder letzte Element zuzugreifen, dann würde PHP automatisch Warnungen generieren.
$first = (isset($arr[0])) ? $arr[0] : null; wiederum ist ein bedingter Ausdruck, der $first den ersten Wert von $arr zuweist, sofern isset($arr[0]) true ergibt (also ein Wert mit Schlüssel 0 existiert). Sonst wird $first NULL zugewiesen.
Analog zum Vorhergehenden kann auch der erste und letzte Schlüssel im Array bestimmt werden.
Es wird dann array_keys() statt array_values() verwendet.
PHP-Code
<?php $arr = array('eins'=>1, 'zwei'=>2, 'drei'=>3); $arr = array_keys($arr); // hier array_keys(), sonst verändert sich nichts $first = (isset($arr[0])) ? $arr[0] : null; $last = (isset($arr[count($arr)-1])) ? $arr[count($arr)-1] : null; var_dump($first); var_dump($last); ?>
Ausgabe
string(4) "eins" string(4) "drei"
Anmerkung: Insbesondere bei größeren Arrays sollte man count($arr)-1 nur ein Mal berechnen und in einer Variablen zwischenspeichern. Derzeit wird der Wert immer zwei Mal berechnet (vorausgesetzt das Array ist nicht leer), wodurch auch zwei Mal alle Elemente im Array gezählt werden müssen.
2. Mit reset(), end() und current()
Eine andere Lösung bieten die Funktionen reset(), end() und current().
reset() setzt den internen Zeiger des Arrays auf das erste Element.
end() hingegen setzt ihn auf das letzte Element.
Mit current() kann der Wert an der aktuellen Position des internen Array-Zeigers ausgelesen werden.
current() gibt (bool)false zurück, falls der Array-Zeiger auf ein Element hinter dem Ende des Arrays zeigt (bei einem leeren Array ist das immer der Fall).
Das Ergebnis von current() ist daher nicht eindeutig, wenn das Array auch (bool)false enthalten kann.
PHP-Code
<?php $arr = array('eins'=>1, 'zwei'=>2, 'drei'=>3); reset($arr); $first = (current($arr)!==false) ? current($arr) : null; end($arr); $last = (current($arr)!==false) ? current($arr) : null; var_dump($first); var_dump($last); ?>
Ausgabe
int(1) int(3)
Der erste und letzte Schlüssel kann bestimmt werden, indem current($arr) durch key($arr) ersetzt wird.
PHP-Code
<?php $arr = array('eins'=>1, 'zwei'=>2, 'drei'=>3); reset($arr); $first = (key($arr)!==false) ? key($arr) : null; end($arr); $last = (key($arr)!==false) ? key($arr) : null; var_dump($first); var_dump($last); ?>
Ausgabe
string(4) "eins" string(4) "drei"
3. Das erste Element mit array_shift() oder das letzte mit array_pop() auslesen
Wird array_shift() auf ein Array angewendet, dann gibt es das erste Element im Array zurück.
Der Nachteil ist, dass die Funktion den Wert nicht nur ausliest, sondern auch entfernt.
Dem Array fehlt also danach der erste Wert.
Soll sich das Array nicht verändern, dann muss er wieder hinzugefügt werden (array_unshift() kann dazu verwendet werden).
Dabei gehen die Schlüssel des Arrays verloren (bzw. sie werden auf 0, 1, 2, 3, ... zurückgesetzt).
Analog zu array_shift() liefert array_pop() das letzte Element, welches es ebenfalls entfernt.
Um es wieder hinzuzufügen kann array_push() verwendet werden.
Sowohl array_shift() als auch array_pop() geben NULL zurück, falls das übergeben Array leer ist (oder falls es gar kein Array ist).
PHP-Code
<?php $arr = array('eins'=>1, 'zwei'=>2, 'drei'=>3); $first = array_shift($arr); array_unshift($arr, $first); $last = array_pop($arr); array_push($arr, $last); var_dump($first); var_dump($last); ?>
Ausgabe
int(1) int(3)
4. Auslesen mit array_slice()
Auch array_slice($array, $offset, $length) kann verwendet werden, um das erste oder letzte Element eines Arrays zu bestimmen.
Für das erste Element muss entsprechend $offset=0 und $length=1 gesetzt werden, für das letzte hingegen $offset=count($array)-1 und $length=1.
Von array_slice() wird allerdings standardmäßig ein Array zurückgegeben, sodass daraus wiederum der Wert ausgelesen werden muss.
PHP-Code
<?php $arr = array('eins'=>1, 'zwei'=>2, 'drei'=>3); $firstArr = array_slice($arr, 0, 1); $lastArr = array_slice($arr, count($arr)-1, 1); var_dump($firstArr); var_dump($lastArr); // Umwandlung der Arrays in die zugehörigen Werte $first = (!empty($firstArr)) ? current($firstArr) : null; $last = (!empty($lastArr)) ? current($lastArr) : null; var_dump($first); var_dump($last); ?>
Ausgabe
array(1) { ["eins"]=> int(1) } array(1) { ["drei"]=> int(3) } int(1) int(3)