Wer Elemente dynamisch an ein Array anhängen möchte, kann dafür array_push() verwenden. Die Funktion fügt ein oder mehrere Elemente an das Ende eines Arrays an und gibt die neue Länge des Arrays zurück. Gerade wenn mehrere Werte auf einmal angehängt werden sollen, ist array_push() die richtige Wahl.
Syntax von array_push()
Die Funktion erwartet als ersten Parameter das Array und danach beliebig viele Werte, die angehängt werden sollen:
<?php
array_push(array &$array, mixed ...$values): int
?>
Der Rückgabewert ist die neue Anzahl der Elemente im Array. Das Array selbst wird direkt verändert (per Referenz übergeben), es muss also nicht neu zugewiesen werden.
Grundlagen: Elemente an ein Array anhängen
Im einfachsten Fall übergibt man ein Array und die gewünschten Werte:
<?php
$fruechte = ['Banane', 'Apfel'];
array_push($fruechte, 'Erdbeere', 'Kiwi');
print_r($fruechte);
/* Ausgabe:
Array
(
[0] => Banane
[1] => Apfel
[2] => Erdbeere
[3] => Kiwi
)
*/
?>
Die neuen Elemente werden in der angegebenen Reihenfolge am Ende des Arrays angefügt. Die bestehenden Indizes bleiben unverändert.
array_push() vs. Kurzschreibweise $array[] = $wert
Für das Anhängen eines einzelnen Elements gibt es in PHP eine kürzere und schnellere Alternative: die Kurzschreibweise $array[] = $wert. Der Unterschied im Überblick:
<?php
$farben = ['rot', 'blau'];
/* Ein Element: Kurzschreibweise bevorzugen */
$farben[] = 'gruen';
/* Mehrere Elemente: array_push nutzen */
array_push($farben, 'gelb', 'lila', 'orange');
print_r($farben);
/* Ausgabe:
Array
(
[0] => rot
[1] => blau
[2] => gruen
[3] => gelb
[4] => lila
[5] => orange
)
*/
?>
Die Kurzschreibweise $array[] = $wert ist schneller als array_push(), weil kein Funktionsaufruf nötig ist. Bei einzelnen Elementen sollte man daher immer die Kurzform verwenden. array_push() lohnt sich vor allem dann, wenn mehrere Werte gleichzeitig angehängt werden sollen.
Praxisbeispiel: Fehlermeldungen sammeln
Ein typischer Anwendungsfall für array_push() ist das Sammeln von Daten in einer Schleife oder bei einer Validierung. Das folgende Beispiel prüft Formulareingaben und sammelt alle Fehler in einem Array:
<?php
$fehler = [];
$name = '';
$email = 'test@';
$alter = -5;
if (empty($name)) {
$fehler[] = 'Name darf nicht leer sein.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$fehler[] = 'Ungültige E-Mail-Adresse.';
}
if ($alter < 0 || $alter > 150) {
$fehler[] = 'Alter muss zwischen 0 und 150 liegen.';
}
if (count($fehler) > 0) {
echo 'Es gibt ' . count($fehler) . ' Fehler:';
foreach ($fehler as $f) {
echo '- ' . $f;
}
} else {
echo 'Alle Eingaben sind gültig.';
}
?>
Hier wird die Kurzschreibweise $fehler[] = ... verwendet, weil jeweils nur ein einzelner Wert angehängt wird. Würde man in einem Schritt mehrere Fehler auf einmal hinzufügen, wäre array_push($fehler, $fehler1, $fehler2) die bessere Wahl.
Verhalten bei assoziativen Arrays
Ein häufiger Stolperstein: Wenn man array_push() auf ein assoziatives Array anwendet, erhalten die neuen Elemente automatisch numerische Schlüssel. Die bestehenden String-Schlüssel bleiben erhalten, aber die neuen Einträge passen nicht ins Schema:
<?php
$person = [
'name' => 'Max',
'email' => 'max@example.com'
];
array_push($person, 'Berlin');
print_r($person);
/* Ausgabe:
Array
(
[name] => Max
[email] => max@example.com
[0] => Berlin
)
*/
?>
Der neue Wert bekommt den numerischen Index 0 statt eines sprechenden Schlüssels. Bei assoziativen Arrays sollte man daher direkt einen Schlüssel vergeben: $person['stadt'] = 'Berlin'. array_push() ist für numerisch indizierte Arrays gedacht.
array_push() in Schleifen verwenden
In Schleifen ist array_push() oder die Kurzschreibweise besonders nützlich, um Ergebnisse schrittweise zu sammeln:
<?php
$zahlen = [12, 5, 8, 23, 3, 17, 42, 9];
$grosse = [];
foreach ($zahlen as $z) {
if ($z > 10) {
$grosse[] = $z;
}
}
print_r($grosse);
/* Ausgabe:
Array
(
[0] => 12
[1] => 23
[2] => 17
[3] => 42
)
*/
?>
Dieses Muster kommt in der Praxis ständig vor: Man iteriert über Daten, filtert nach bestimmten Kriterien und sammelt die Treffer in einem neuen Array. Für einzelne Elemente pro Durchlauf ist die Kurzschreibweise $grosse[] = $z die richtige Wahl.
Verwandte Funktionen: Die Array-Stack-Familie
PHP bietet vier Funktionen, um Elemente am Anfang oder Ende eines Arrays hinzuzufügen und zu entfernen. Zusammen bilden sie eine Stack- und Queue-Struktur:
Mit array_push() und array_pop() lässt sich ein Stack (Last-In-First-Out) abbilden. Kombiniert man array_push() mit array_shift(), erhält man eine Queue (First-In-First-Out). Wer Elemente am Anfang einfügen möchte, findet im Tutorial zu array_unshift() weitere Beispiele.
Häufige Fragen zu array_push()
Die wichtigsten Fragen rund um array_push() im Überblick:
Wann sollte ich array_push() statt $array[] verwenden? Wenn mehrere Werte gleichzeitig angehängt werden sollen. Für ein einzelnes Element ist $array[] = $wert kürzer und schneller. array_push($arr, $a, $b, $c) spart dagegen drei einzelne Zuweisungen.
Was gibt array_push() zurück? Die Funktion gibt die neue Anzahl der Elemente im Array als int zurück. Dieser Rückgabewert wird in der Praxis selten genutzt, kann aber nützlich sein, um die aktuelle Größe des Arrays zu kennen.
Kann array_push() auch am Anfang einfügen? Nein. array_push() fügt Elemente ausschließlich am Ende ein. Für das Einfügen am Anfang gibt es array_unshift().
Welche Datentypen kann array_push() anhängen? array_push() akzeptiert jeden Datentyp als Wert: Strings, Zahlen, Arrays, Objekte oder null. Der Typ wird nicht verändert.
Was passiert bei einem leeren Array? Das funktioniert problemlos. array_push() fügt die Elemente einfach in das leere Array ein und nummeriert sie ab Index 0. Auch die Kurzschreibweise $arr[] = $wert funktioniert mit leeren Arrays.