Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

PHP array_unshift() meistern: Elemente am Anfang von Arrays hinzufügen

Sie befinden sich: Home > Php Tutorial > Elemente am Anfang eines Ar...

Elemente am Anfang eines Arrays hinzufügen


Eintrag am:  08.01.2023
Hits / Besucher:  1397
Sprache:  Deutsch
Kategorie:  Fortgeschrittene Tut...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wenn neue Einträge in einem Array an erster Stelle stehen sollen, ist array_unshift() die richtige Funktion. Ob Warteschlangen, Aufgabenlisten oder Protokolle: Dieses Tutorial zeigt dir, wie du Elemente gezielt am Anfang einfügst und welche Alternativen es in modernem PHP gibt.

Abstraktes Titelbild mit PHP-Logo, Kacheln und Array-Ausschnitt für array_unshift()

Das Wichtigste zu array_unshift() auf einen Blick

array_unshift() setzt ein oder mehrere Werte an den Anfang eines Arrays und verschiebt alle vorhandenen Elemente nach hinten. Die Funktion arbeitet direkt am Originalarray, weil sie dieses per Referenz übergibt.

Du kannst array_unshift() überall da einsetzen, wo neue Einträge zuerst verarbeitet werden sollen, zum Beispiel bei Warteschlangen (Queues), Aufgabenlisten oder für Protokolle, in denen das Neueste immer ganz oben stehen soll.

Hauptvorteile:

  • Direkte Modifikation des Originals
  • Einfache Syntax für mehrere neue Elemente
  • Rückgabe der neuen Elementanzahl

Syntax und Parameter von array_unshift()

Bevor du mit array_unshift() arbeitest, solltest du Syntax, Parameter und Rückgabewert kennen.

Syntax

<?php

/* Fügt Werte am Anfang des Arrays hinzu */
int array_unshift(array &$aArray, mixed ...$mWerte)
  • &$aArray: Das zu verändernde Array (per Referenz, das &-Zeichen ist entscheidend)
  • ...$mWerte: Ein oder mehrere Werte, die am Anfang eingefügt werden sollen
  • Rückgabewert: Anzahl der Elemente nach dem Hinzufügen (int)

Du kannst beliebig viele Werte als weitere Parameter übergeben, einzeln oder durch Kommas getrennt. Seit PHP 7.3.0 ist auch ein Aufruf ohne weitere Werte möglich (dann wird nichts verändert).

Beispiel:

<?php

$aMeineListe = ["Eins", "Zwei"];
$iNeu = array_unshift($aMeineListe, "Start");
/* $aMeineListe = ["Start", "Eins", "Zwei"] */
/* $iNeu = 3 */

array_unshift() in Aktion: Code-Beispiele

Im nächsten Beispiel wird gezeigt, wie du einem numerisch indizierten Array gezielt einen neuen Wert am Anfang hinzufügst.

Einzelnes Element hinzufügen

<?php

$aTiere = ["Hund", "Katze"];
$iAnzahl = array_unshift($aTiere, "Maus");
/* $aTiere = ["Maus", "Hund", "Katze"] */
/* $iAnzahl = 3 */

Alle numerischen Indizes werden neu nummeriert. Das neue Element steht bei Index 0.

Mehrere Elemente hinzufügen

<?php

$aFarben = ["Blau", "Grün"];
$iNeu = array_unshift($aFarben, "Rot", "Gelb");
/* $aFarben = ["Rot", "Gelb", "Blau", "Grün"] */
/* $iNeu = 4 */

Die Reihenfolge der neuen Elemente bleibt wie angegeben. „Rot“ steht vorne.

Mit assoziativen Arrays

<?php

$aDaten = ["name" => "Max", "stadt" => "Berlin"];
array_unshift($aDaten, "ID123");
/* $aDaten = [0 => "ID123", "name" => "Max", "stadt" => "Berlin"] */

Neue Werte bekommen numerische Schlüssel, bestehende String-Schlüssel bleiben erhalten.

Ein Array als Wert hinzufügen

<?php

$aA = [1, 2, 3];
$aB = ["X", "Y"];
array_unshift($aA, $aB);
/* $aA = [0 => ["X", "Y"], 1 => 1, 2 => 2, 3 => 3] */

Das komplette Array wird als ein einziger Wert vorne eingefügt, nicht verschmolzen. Wenn du die Elemente einzeln einfügen willst, nutze den Spread-Operator:

<?php

$aA = [1, 2, 3];
$aB = ["X", "Y"];
$aErgebnis = [...$aB, ...$aA];
/* $aErgebnis = ["X", "Y", 1, 2, 3] */

Schlüsselverhalten und wichtige Aspekte

Beim Hinzufügen neuer Elemente am Anfang eines Arrays verändert sich das Verhalten der Schlüssel je nach Array-Typ.

Schlüsselbehandlung

  • Numerische Schlüssel: Werden immer neu vergeben (beginnend bei 0, 1, 2 usw.)
  • String-Schlüssel: Bleiben unverändert erhalten
<?php

$aMix = ["a" => 9, "b" => 8];
array_unshift($aMix, "neu");
/* [0 => "neu", "a" => 9, "b" => 8] */

Interner Array-Zeiger

array_unshift() setzt den Array-Zeiger auf das erste Element zurück. Das ist wichtig für Funktionen wie current(), next() und prev().

Leere Arrays

Ein leeres Array nimmt alle neuen Werte ganz vorne auf. Die Rückgabe ist die Anzahl der hinzugefügten Werte.

Praktische Anwendungsfälle

Hier siehst du typische Szenarien, in denen array_unshift() seine Stärken ausspielt.

Warteschlange (Queue, FIFO)

Eine FIFO-Queue (First In, First Out) lässt sich in PHP auf zwei Wegen umsetzen:

<?php

/* Variante 1: unshift + pop */
$aQueue = ["Job1", "Job2"];
array_unshift($aQueue, "Job0"); // Vorne einfügen
$sNaechster = array_pop($aQueue); // Hinten entnehmen
/* $sNaechster = "Job2" */

/* Variante 2: push + shift (ueblicher!) */
$aQueue2 = ["Job1", "Job2"];
$aQueue2[] = "Job3"; // Hinten anfügen
$sNaechster2 = array_shift($aQueue2); // Vorne entnehmen
/* $sNaechster2 = "Job1" */

Beide Varianten ergeben eine FIFO-Queue. Die zweite Variante mit array_push()/[] und array_shift() ist in PHP gängiger und etwas performanter, da array_push() keine Indizes neu vergeben muss.

Aufgabenliste: Neue Aufgaben ganz oben

<?php

$aAufgaben = ["Einkaufen", "Mails beantworten"];
array_unshift($aAufgaben, "Kundentelefonat");


foreach ($aAufgaben as $sAufgabe) {
echo $sAufgabe . "\n";
}
/* Ausgabe:
Kundentelefonat
Einkaufen
Mails beantworten */

Logging: Neueste Einträge oben

<?php

$aLog = [];
array_unshift($aLog, date('H:i:s') . " User eingeloggt");
array_unshift($aLog, date('H:i:s') . " Seite aufgerufen");
/* Neuester Eintrag steht immer bei Index 0 */

Breadcrumb-Navigation: Startseite voranstellen

Ein typischer Anwendungsfall: Die Breadcrumb-Navigation wird dynamisch aufgebaut, aber „Startseite“ soll immer am Anfang stehen:

<?php

$aBreadcrumbs = ["Tutorials", "PHP Grundlagen", "Arrays"];

/* Startseite immer vorne */
array_unshift($aBreadcrumbs, "Startseite");

echo implode(" > ", $aBreadcrumbs);
/* Startseite > Tutorials > PHP Grundlagen > Arrays */

Spread-Operator als moderne Alternative

Seit PHP 7.4 kannst du den Spread-Operator ... verwenden, um Elemente am Anfang eines Arrays einzufügen. Der entscheidende Unterschied: Es wird ein neues Array erzeugt, das Original bleibt unverändert.

<?php

$aOriginal = ["Hund", "Katze"];

/* Mit array_unshift (verändert das Original) */
array_unshift($aOriginal, "Maus");
/* $aOriginal = ["Maus", "Hund", "Katze"] */

/* Mit Spread-Operator (neues Array) */
$aOriginal2 = ["Hund", "Katze"];
$aNeu = ["Maus", ...$aOriginal2];
/* $aNeu = ["Maus", "Hund", "Katze"] */
/* $aOriginal2 bleibt ["Hund", "Katze"] */

Wann welche Variante? Verwende array_unshift(), wenn du das Array direkt verändern willst (z.B. in Schleifen). Der Spread-Operator eignet sich, wenn du das Original behalten und ein neues Array erzeugen möchtest, also einen funktionalen Programmierstil bevorzugst.

Performance-Überlegungen

array_unshift() muss intern alle numerischen Indizes neu zuweisen, weil jedes bestehende Element einen Platz nach hinten rückt. Das macht die Operation bei großen Arrays langsamer als array_push(), das einfach am Ende anhängt. Technisch gesprochen ist array_unshift() eine O(n)-Operation (die Laufzeit wächst linear mit der Array-Größe), während array_push() O(1) ist (konstant schnell).

Praxis-Tipp: Bei Performance-kritischen Szenarien mit zehntausenden Elementen kannst du stattdessen am Ende anfügen und bei Bedarf array_reverse() einsetzen. Für echte Queue-Datenstrukturen bietet PHP außerdem SplDoublyLinkedList oder SplQueue, die für Einfügen an beiden Enden optimiert sind.

array_unshift() im Vergleich

Die folgende Tabelle zeigt, wie sich array_unshift() von verwandten Array-Funktionen unterscheidet.

FunktionZweckPositionSchlüsselverhalten
array_unshift()Am Anfang einfügenAnfangNeu: numerisch, alt: bleibt
array_push()Am Ende einfügenEndeNächster numerischer Index
array_shift()Anfang entfernenAnfangVerschiebt alles nach vorne
array_pop()Ende entfernenEndeEntfernt letztes Element
array_merge()Arrays kombinierenNach ReihenfolgeSchlüssel werden angepasst
array_splice()Beliebige PositionFrei wählbarIndizes neu vergeben

array_unshift() ist das Gegenstück zu array_push(). Wenn du Elemente an einer beliebigen Position einfügen willst (nicht nur am Anfang), ist array_splice() die richtige Wahl:

<?php

$aListe = ["A", "B", "D"];
/* "C" an Position 2 einfügen */
array_splice($aListe, 2, 0, ["C"]);
/* $aListe = ["A", "B", "C", "D"] */

Häufige Fehler und Best Practices

Einige Stolperfallen tauchen bei der Arbeit mit array_unshift() immer wieder auf.

Das Original-Array wird verändert: Immer daran denken, dass das Ursprungsarray modifiziert wird. Wenn du das Original behalten willst, nutze den Spread-Operator.

Schlüsselverhalten richtig einschätzen: Neue Werte werden immer numerisch einsortiert. String-Schlüssel bleiben bestehen. Das kann zu unerwarteten Ergebnissen führen, wenn du bestimmte Keys erwartest.

TypeError seit PHP 8.0: Wenn du kein Array übergibst, wirft PHP 8.0 einen TypeError. In PHP 7.x wurde nur eine Warnung ausgegeben. Prüfe daher den Typ oder fange den Fehler ab:

<?php

/* Sichere Variante mit Typprüfung */
if (is_array($aMeineDaten)) {
array_unshift($aMeineDaten, "neu");
}

/* Oder mit try-catch (PHP 8.0+) */
try {
array_unshift($mVariable, "neu");
} catch (TypeError $e) {
echo "Kein Array übergeben!";
}

Rückgabewert beachten: Die Funktion gibt nicht das Array zurück, sondern die Anzahl der Elemente. Schreibe also nicht $a = array_unshift($a, "x"), sonst überschreibst du dein Array mit einer Zahl.

FAQ: Häufig gestellte Fragen

Hier findest du Antworten auf die häufigsten Fragen rund um array_unshift().

Warum ändern sich meine Array-Schlüssel nach array_unshift()?
Numerische Schlüssel werden bei array_unshift() immer neu vergeben, beginnend bei 0. String-Schlüssel bleiben unverändert. Wenn du die numerischen Keys beibehalten musst, nutze den Spread-Operator oder array_merge().

Kann ich mit array_unshift() einen bestimmten Key setzen?
Nein. Neue Elemente bekommen immer automatisch numerische Schlüssel. Wenn du einen bestimmten String-Key am Anfang brauchst, nutze den Union-Operator: $aNeu = ["meinKey" => "Wert"] + $aAlt;

Was passiert bei einem leeren Array?
array_unshift() funktioniert problemlos mit leeren Arrays. Die neuen Werte werden einfach eingefügt und bilden das Array.

Was ist schneller: array_unshift() oder der Spread-Operator?
Bei kleinen Arrays ist der Unterschied vernachlässigbar. array_unshift() ändert das Array direkt (in-place), der Spread-Operator erzeugt eine Kopie. Für große Arrays kann array_unshift() daher speichereffizienter sein, ist aber durch die Index-Neuvergabe langsamer.

Gibt es einen TypeError wenn die Variable kein Array ist?
Ja, seit PHP 8.0 wird ein TypeError geworfen. In PHP 7.x gab es nur eine Warnung. Prüfe den Typ vorher mit is_array() oder fange den Fehler mit try-catch ab.

Fazit

Nutze array_unshift(), wenn du schnell und unkompliziert Elemente am Anfang eines Arrays brauchst. Für Warteschlangen, Verlaufsspeicherung oder Aufgabenlisten ist es die einfachste Lösung. In modernem PHP (ab 7.4) bietet der Spread-Operator [...$neu, ...$alt] eine elegante Alternative, die das Original unverändert lässt. Bei großen Arrays und Performance-kritischen Szenarien lohnt sich ein Blick auf SplQueue.

 

Tags:

 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.