Die PHP-Funktion array_shift verstehen
Die Funktion array_shift in PHP entfernt das erste Element eines Arrays und gibt dessen Wert zurück. Alles zu Syntax, Rückgabewert und Re-Indizierung.
Die Funktion array_shift in PHP entfernt das erste Element eines Arrays und gibt dessen Wert zurück. Da sie immer am Anfang des Arrays arbeitet, ist sie das natürliche Werkzeug zum Verarbeiten einer Liste vom Beginn her — sei es zum Abarbeiten einer Warteschlange, zum Entfernen einer Kopfzeile oder zum Wegwerfen eines unerwünschten führenden Elements.
Zwei Dinge unterscheiden array_shift vom einfachen unset($array[0]):
- Es verändert das ursprüngliche Array direkt (per Referenz übergeben) — es wird kein neues Array erstellt.
- Es re-indiziert numerische Schlüssel, sodass die verbleibenden Elemente immer wieder bei
0beginnen. String-Schlüssel bleiben unverändert.
Diese Seite behandelt die Syntax, den Rückgabewert, das wichtige Re-Indizierungsverhalten, einen häufigen Loop-Fallstrick und mehrere ausführbare Beispiele.
Syntax
array_shift(array &$array): mixed| Teil | Bedeutung |
|---|---|
&$array | Das array, aus dem verschoben wird. Wird per Referenz übergeben und daher direkt verändert. |
| Rückgabewert | Der Wert des entfernten ersten Elements oder null, wenn das array leer ist. |
Da das array per Referenz übergeben wird, ruft man array_shift($colors) auf einer Variablen auf — nicht auf einem Literal oder einem Funktionsergebnis.
Das erste Element entfernen
Die häufigste Verwendung besteht darin, das erste Element zu entfernen. Die Funktion verändert das array direkt:
Das Ergebnis lautet:
Array
(
[0] => green
[1] => blue
)Den entfernten Wert erfassen
array_shift gibt das entfernte Element zurück, sodass man es behalten kann, während das array in einer einzigen Anweisung verkleinert wird:
Das Ergebnis lautet:
red
Array
(
[0] => green
[1] => blue
)Schlüssel werden re-indiziert
Dies ist das Verhalten, das die meisten überrascht. array_shift entfernt nicht einfach $array[0] — es nummeriert jeden verbleibenden ganzzahligen Schlüssel ab 0 neu. String-Schlüssel behalten ihre Namen.
<?php
$data = [5 => "a", 10 => "b", "x" => "c"];
array_shift($data); // removes "a"
print_r($data);
?>Das Ergebnis lautet:
Array
(
[0] => b
[x] => c
)Zu beachten ist, dass 10 => "b" zu 0 => "b" wurde, während "x" => "c" unverändert blieb. Wenn die ursprünglichen numerischen Schlüssel erhalten bleiben sollen, verwende stattdessen array_slice.
Ein array als Warteschlange verarbeiten
Ein gängiges Muster ist, ein array von vorne zu leeren und dabei ein Element nach dem anderen zu verarbeiten. Das übliche Idiom verwendet array_shift innerhalb einer while-Schleife:
Das Ergebnis lautet:
Running: build
Running: test
Running: deployDie Schleife endet, weil array_shift null zurückgibt, sobald das array leer ist.
Fallstrick: keine Schleife mit einem Wahrheitswert-Test
Oft sieht man diese kürzere Form:
while ($value = array_shift($queue)) { ... }Sie funktioniert für Strings wie "build", ist aber eine Falle. Die Bedingung ist nur dann wahr, wenn der Wert truthy ist, sodass die Schleife beim ersten 0, "", "0", false oder null vorzeitig abbricht:
<?php
$numbers = array(3, 0, 1);
while ($n = array_shift($numbers)) {
echo "$n\n";
}
print_r($numbers); // 1 was never processed
?>Das Ergebnis lautet:
3
Array
(
[0] => 1
)Die Schleife brach bei 0 ab und ließ 1 zurück. Vergleiche immer explizit gegen null (!== null), wenn die Werte falsy sein könnten.
Mehrere führende Elemente entfernen
Durch wiederholtes Aufrufen von array_shift werden Elemente nacheinander vom Anfang entfernt. Hier werden die ersten drei entfernt:
Das Ergebnis lautet:
Array
(
[0] => yellow
[1] => orange
)Um einen führenden Block in einem einzigen Aufruf statt in einer Schleife zu entfernen, kann array_splice($colors, 0, 3) verwendet werden.
Verwandte Funktionen
array_shift ist eine von vier Funktionen zum Hinzufügen und Entfernen von Elementen an den Enden eines Arrays:
| Funktion | Wirkt auf | Was sie tut |
|---|---|---|
| array_shift | Anfang | Entfernt das erste Element und gibt es zurück |
| array_unshift | Anfang | Fügt ein oder mehrere Elemente am Anfang hinzu |
| array_pop | Ende | Entfernt das letzte Element und gibt es zurück |
| array_push | Ende | Fügt ein oder mehrere Elemente am Ende hinzu |
Zum Herausschneiden ohne Veränderung des ursprünglichen Arrays siehe array_slice; zum Entfernen oder Ersetzen eines Bereichs siehe array_splice.
Fazit
array_shift entfernt das erste Element eines Arrays, gibt dessen Wert zurück, verändert das array direkt und re-indiziert die verbleibenden ganzzahligen Schlüssel ab 0. Es eignet sich ideal zum Verarbeiten eines Arrays als Warteschlange und zum Entfernen unerwünschter führender Elemente — man sollte nur das Re-Indizierungsverhalten und den oben beschriebenen Fallstrick mit falsy-Werten in der Schleife im Hinterkopf behalten.