PHP bietet eine umfangreiche Sammlung von Funktionen, um Arrays zu verändern. Ob Elemente hinzufügen, entfernen, ersetzen oder ganze Arrays zusammenfügen: Für jeden Anwendungsfall gibt es die passende Funktion. Dieses Tutorial gibt einen Überblick über die wichtigsten Manipulationsmöglichkeiten und verlinkt zu den jeweiligen Detail-Tutorials.
Schnellübersicht: Welche Funktion für welchen Zweck?
Die folgende Tabelle zeigt auf einen Blick, welche Funktion man für welche Aufgabe braucht:
Elemente hinzufügen
Es gibt mehrere Wege, Elemente zu einem Array hinzuzufügen. Die Wahl hängt davon ab, ob am Anfang, am Ende oder an einer bestimmten Position eingefügt werden soll.
Am Ende: $array[] und array_push()
Die einfachste Methode ist die Kurzschreibweise $array[] = $wert. Für mehrere Werte gleichzeitig eignet sich array_push():
<?php
$farben = ['rot', 'blau'];
/* Ein Element: Kurzschreibweise */
$farben[] = 'gruen';
/* Mehrere Elemente gleichzeitig */
array_push($farben, 'gelb', 'lila');
print_r($farben);
/* Array ( [0]=>rot [1]=>blau
[2]=>gruen [3]=>gelb [4]=>lila ) */
?>
Am Anfang: array_unshift()
Mit array_unshift() werden Elemente am Anfang des Arrays eingefügt. Bestehende numerische Schlüssel werden dabei neu nummeriert:
<?php
$zahlen = [3, 4, 5];
array_unshift($zahlen, 1, 2);
print_r($zahlen);
/* Array ( [0]=>1 [1]=>2
[2]=>3 [3]=>4 [4]=>5 ) */
?>
Elemente entfernen
Zum Entfernen gibt es verschiedene Funktionen, je nachdem ob am Anfang, am Ende oder an einer bestimmten Position gelöscht werden soll.
Am Ende: array_pop()
array_pop() entfernt das letzte Element und gibt dessen Wert zurück:
<?php
$stack = ['A', 'B', 'C'];
$letztes = array_pop($stack); // 'C'
print_r($stack);
/* Array ( [0]=>A [1]=>B ) */
?>
Am Anfang: array_shift()
array_shift() entfernt das erste Element. Alle numerischen Schlüssel werden neu nummeriert:
<?php
$queue = ['A', 'B', 'C'];
$erstes = array_shift($queue); // 'A'
print_r($queue);
/* Array ( [0]=>B [1]=>C ) */
?>
Bestimmten Schlüssel entfernen: unset()
Mit unset() löscht man gezielt ein Element über seinen Schlüssel. Die übrigen Indizes bleiben dabei unverändert:
<?php
$tiere = ['Hund', 'Katze', 'Vogel', 'Fisch'];
unset($tiere[1]); // 'Katze' entfernen
print_r($tiere);
/* Array ( [0]=>Hund [2]=>Vogel [3]=>Fisch ) */
/* Indizes neu nummerieren */
$tiere = array_values($tiere);
/* Array ( [0]=>Hund [1]=>Vogel [2]=>Fisch ) */
?>
Nach unset() bleiben Lücken in den Indizes. Wer lückenlose Indizes braucht, nutzt array_values() zum Neuindizieren.
array_splice(): Die Universalfunktion
array_splice() ist die vielseitigste Funktion für Array-Manipulation. Sie kann Elemente löschen, ersetzen und an beliebiger Position einfügen. Die Syntax lautet:
<?php
array_splice(
array &$array,
int $offset,
?int $length = null,
mixed $replacement = []
): array
?>
Je nach Kombination der Parameter verhält sich die Funktion unterschiedlich:
Modus 1: Elemente löschen
Nur $offset und $length angeben, ohne Ersatz:
<?php
$monate = ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai'];
/* Ab Index 1, zwei Elemente entfernen */
$entfernt = array_splice($monate, 1, 2);
print_r($monate); // ['Jan', 'Apr', 'Mai']
print_r($entfernt); // ['Feb', 'Mrz']
?>
Die Funktion gibt die entfernten Elemente zurück und nummeriert das Array automatisch neu.
Modus 2: Elemente ersetzen
Mit dem vierten Parameter $replacement werden die gelöschten Elemente durch neue ersetzt:
<?php
$farben = ['rot', 'blau', 'gruen', 'gelb'];
/* Index 1-2 durch neue Werte ersetzen */
array_splice($farben, 1, 2, ['pink', 'lila', 'orange']);
print_r($farben);
/* ['rot', 'pink', 'lila', 'orange', 'gelb'] */
?>
Die Anzahl der eingesetzten Elemente muss nicht mit der Anzahl der entfernten übereinstimmen. Das Array wächst oder schrumpft entsprechend.
Modus 3: An bestimmter Position einfügen
Setzt man $length auf 0, werden keine Elemente gelöscht, sondern nur neue eingefügt:
<?php
$buchstaben = ['A', 'B', 'E', 'F'];
/* Ab Index 2 einfügen, nichts löschen */
array_splice($buchstaben, 2, 0, ['C', 'D']);
print_r($buchstaben);
/* ['A', 'B', 'C', 'D', 'E', 'F'] */
?>
Arrays zusammenfügen
Zwei oder mehr Arrays lassen sich auf verschiedene Arten kombinieren.
array_merge()
array_merge() fügt Arrays sequentiell zusammen. Bei numerischen Schlüsseln wird neu nummeriert, bei String-Schlüsseln überschreibt das spätere Array den gleichen Schlüssel:
<?php
$a = ['rot', 'blau'];
$b = ['gruen', 'gelb'];
$zusammen = array_merge($a, $b);
/* ['rot', 'blau', 'gruen', 'gelb'] */
/* Bei assoziativen Schlüsseln: */
$standard = ['host' => 'localhost', 'port' => 3306];
$custom = ['port' => 5432, 'db' => 'meinedb'];
$config = array_merge($standard, $custom);
/* ['host'=>'localhost', 'port'=>5432, 'db'=>'meinedb'] */
?>
Ab PHP 7.4 kann man auch den Spread-Operator verwenden: $zusammen = [...$a, ...$b]. Das funktioniert genauso wie array_merge() und ist kürzer.
array_combine()
array_combine() erstellt ein neues Array, indem es die Werte des ersten Arrays als Schlüssel und die Werte des zweiten Arrays als Werte verwendet:
<?php
$keys = ['name', 'alter', 'stadt'];
$values = ['Max', 30, 'Berlin'];
$person = array_combine($keys, $values);
print_r($person);
/* Array ( [name]=>Max [alter]=>30 [stadt]=>Berlin ) */
?>
Beide Arrays müssen die gleiche Anzahl an Elementen haben, sonst gibt die Funktion einen Fehler aus.
Arrays vergleichen und filtern
PHP bietet leistungsstarke Funktionen, um Arrays zu vergleichen und gezielt Elemente herauszufiltern.
array_diff(): Unterschiede finden
array_diff() gibt alle Werte aus dem ersten Array zurück, die in keinem der anderen Arrays vorkommen:
<?php
$alle = ['PHP', 'Python', 'Java', 'Ruby'];
$gelernt = ['PHP', 'Java'];
$offen = array_diff($alle, $gelernt);
print_r($offen);
/* Array ( [1]=>Python [3]=>Ruby ) */
?>
Daneben gibt es array_diff_assoc() (vergleicht Schlüssel und Werte) und array_diff_key() (vergleicht nur Schlüssel). Details dazu im array_diff() Tutorial.
array_filter(): Elemente nach Kriterien filtern
array_filter() durchläuft jedes Element und behält nur diejenigen, für die die Callback-Funktion true zurückgibt:
<?php
$zahlen = [12, 0, 5, -3, 8, '', null, 42];
/* Ohne Callback: Entfernt alle falsy-Werte */
$bereinigt = array_filter($zahlen);
/* [12, 5, -3, 8, 42] (Indizes bleiben!) */
/* Mit Callback: Nur positive Zahlen */
$positiv = array_filter($zahlen, function($z) {
return is_int($z) && $z > 0;
});
/* [12, 5, 8, 42] */
?>
array_unique(): Duplikate entfernen
array_unique() entfernt doppelte Werte und behält jeweils das erste Vorkommen:
<?php
$tags = ['php', 'mysql', 'php', 'html', 'mysql'];
$unique = array_unique($tags);
/* ['php', 'mysql', 'html'] (mit Lücken) */
$unique = array_values(array_unique($tags));
/* ['php', 'mysql', 'html'] (lückenlos) */
?>
Praxisbeispiel: Benutzerdaten verarbeiten
Das folgende Beispiel zeigt, wie verschiedene Array-Funktionen im Zusammenspiel arbeiten. Ein Array von Benutzerdaten wird gefiltert, bereinigt und zusammengefügt:
<?php
$benutzer = [
['name' => 'Max', 'aktiv' => true],
['name' => 'Lisa', 'aktiv' => false],
['name' => 'Tom', 'aktiv' => true],
['name' => 'Anna', 'aktiv' => true],
];
/* Nur aktive Benutzer filtern */
$aktive = array_filter($benutzer, function($u) {
return $u['aktiv'] === true;
});
/* Namen extrahieren */
$namen = array_column($aktive, 'name');
/* ['Max', 'Tom', 'Anna'] */
/* Neue Benutzer hinzufügen */
array_push($namen, 'Eva', 'Jan');
/* Alphabetisch sortieren */
sort($namen);
print_r($namen);
/* ['Anna', 'Eva', 'Jan', 'Max', 'Tom'] */
?>
Hier arbeiten array_filter(), array_column(), array_push() und sort() zusammen, um eine bereinigte und sortierte Namensliste zu erzeugen.
Häufige Fragen zur Array-Manipulation
Die wichtigsten Fragen im Überblick:
Wie entferne ich ein Element anhand seines Wertes? Mit array_search() den Schlüssel finden und dann mit unset() entfernen: $key = array_search('wert', $array); if ($key !== false) unset($array[$key]);
Was ist der Unterschied zwischen array_merge() und dem Plus-Operator? Der +-Operator behält den Wert aus dem linken Array, wenn ein Schlüssel in beiden vorkommt. array_merge() nimmt den Wert aus dem rechten Array. Bei numerischen Schlüsseln nummeriert array_merge() neu, + behält die Indizes.
Wie sortiere ich ein assoziatives Array? asort() sortiert nach Werten und behält die Schlüssel. ksort() sortiert nach Schlüsseln. usort() erlaubt eine eigene Vergleichsfunktion.
Wie wandle ich ein Array in einen String um? Mit implode(', ', $array) werden alle Werte mit einem Trennzeichen verbunden. Der umgekehrte Weg ist explode(', ', $string).