Element in ein PHP-Array einfügen: Ein Blick unter die Haube
\n\nStell dir vor: Du programmierst ein PHP-Skript für einen Online-Shop. Ein neues Produkt kommt herein und muss genau zwischen „Smartphones“ und „Laptops“ einsortiert werden. Oder du parsed Daten und musst einen Eintrag in die Mitte einer CSV-Datei einfügen. Kommt dir bekannt vor? Die Frage „Insert new item in array on any position in PHP“ hat auf Stack Overflow tausende Aufrufe. Kein Wunder: PHP hat keine eingebaute Funktion „füge Element an Index ein“. Dafür gibt es aber ein mächtiges Werkzeug, das dies elegant und effizient ermöglicht. Lass uns einen Blick darauf werfen, wie das unter der Haube funktioniert.
\n\nWarum gibt es in PHP keine einfache insert()-Funktion?
\n\nIm Gegensatz zu JavaScript (mit splice()) oder Python (list.insert()) sind PHP-Arrays ein Hybrid: Sie sind gleichzeitig Liste und Hash-Tabelle. Wenn du ein Element in der Mitte einfügst, muss PHP nicht nur Zeiger verschieben, sondern die interne Datenstruktur neu aufbauen. Aus diesem Grund haben die Entwickler keine gleichnamige Methode hinzugefügt, sondern ein universelles Werkzeug bereitgestellt – array_splice(). Es löst 99% aller Aufgaben, aber es ist wichtig, seine interne Logik zu verstehen.
Der beste Weg: array_splice()
\n\nDies ist der Hauptakteur unseres Artikels. Die Funktion array_splice() kann nicht nur Teile eines Arrays entfernen, sondern auch neue Elemente an deren Stelle einfügen. Und das ohne ein neues Array zu erstellen – die Änderungen erfolgen „in place“ (per Referenz).
<?php\n$fruits = ['apple', 'banana', 'cherry', 'date'];\n// Füge 'grape' an Position 2 ein (nach 'banana')\narray_splice($fruits, 2, 0, 'grape');\nprint_r($fruits);\n// Ergebnis: ['apple', 'banana', 'grape', 'cherry', 'date']\n?>\n\nSyntax: array_splice(&$array, $offset, $length, $replacement). Der dritte Parameter ($length) ist Null – das bedeutet, wir löschen nichts, sondern fügen nur ein. Der vierte Parameter kann ein einzelnes Element oder ein Array von Elementen sein.
Unter der Haube: Wenn du array_splice() mit einer Länge von Null aufrufst, passiert Folgendes:
- \n
- PHP findet den internen Zeiger auf die Position
$offset. \n - Das Array wird auseinandergezogen: Alle Elemente von der Position bis zum Ende werden nach rechts verschoben. \n
- An der freigewordenen Stelle wird das neue Element (oder die neuen Elemente) eingefügt. \n
- Numerische Schlüssel werden neu indiziert (falls vorhanden). \n
Wichtig: Diese Operation hat eine Laufzeit von O(n) – je größer das Array und je näher die Einfügeposition am Anfang liegt, desto mehr Elemente müssen verschoben werden. Für 99% der Webanwendungen ist das nicht spürbar, aber bei Arrays mit einer Million Einträgen solltest du über Alternativen nachdenken.
\n\nMehrere Elemente einfügen
\n\nMöchtest du gleich drei Elemente einfügen? Übergib einfach ein Array:
\n\n<?php\n$colors = ['red', 'green', 'blue'];\narray_splice($colors, 1, 0, ['yellow', 'purple', 'orange']);\nprint_r($colors);\n// ['red', 'yellow', 'purple', 'orange', 'green', 'blue']\n?>\n\nBeachte: Das eingefügte Array wird nicht verschachtelt – seine Elemente werden „entpackt“ und nacheinander eingefügt.
\n\nManuelles Einfügen: Wenn array_splice nicht geeignet ist
\n\nManchmal muss das ursprüngliche Array unverändert bleiben. Oder du möchtest ein Element einfügen, ohne die Ausgangsdaten zu verändern. Hier helfen array_slice() und einfaches Kopieren.
<?php\nfunction insertIntoArray(array $original, int $position, mixed $element): array\n{\n $before = array_slice($original, 0, $position);\n $after = array_slice($original, $position);\n return array_merge($before, [$element], $after);\n}\n\n$arr = ['a', 'b', 'c', 'd'];\n$newArr = insertIntoArray($arr, 2, 'X');\nprint_r($newArr); // ['a', 'b', 'X', 'c', 'd']\n// $arr bleibt unverändert\n?>\n\nWas passiert unter der Haube? array_slice() erstellt zwei neue Arrays – das ist eine Kopie