Ein Array in PHP ist eine geordnete Map, die Schlüssel auf Werte abbildet. PHP unterscheidet nicht zwischen Listen und Hashmaps — beide sind Arrays. Schlüssel können Integer oder String sein; Werte beliebig. Erzeugt mit [1, 2, 3] oder ["a" => 1]. Zentrale Funktionen: array_map(), array_filter(), array_reduce().
Array erstellen
// Indiziert (Liste)
$sprachen = ['PHP', 'Python', 'Go'];
// Assoziativ (Dictionary)
$user = [
'name' => 'Anna',
'alter' => 28,
'admin' => true,
];
// Verschachtelt
$db = [
'host' => 'localhost',
'options' => ['charset' => 'utf8mb4', 'timeout' => 5],
];
Zugriff, Anfügen, Löschen
echo $sprachen[0]; // PHP
echo $user['name']; // Anna
$sprachen[] = 'Rust'; // ans Ende anhängen
$user['locale'] = 'de'; // Key hinzufügen
unset($user['admin']); // Key entfernen
array_push($sprachen, 'Zig'); // funktional identisch zu $arr[] = ...
Wichtige Array-Funktionen
// Prüfen
in_array('PHP', $sprachen); // bool
array_key_exists('name', $user);
count($sprachen);
// Transformieren
$upper = array_map(strtoupper(...), $sprachen); // ['PHP','PYTHON','GO','RUST']
$long = array_filter($sprachen, fn($s) => strlen($s) > 2);
$sum = array_reduce([1,2,3,4], fn($acc,$n) => $acc + $n, 0); // 10
// Sortieren (verändern das Array direkt)
sort($sprachen); // aufsteigend, neue Keys
rsort($sprachen); // absteigend
usort($users, fn($a,$b) => $a['alter'] <=> $b['alter']);
// Kombinieren
$alle = array_merge($a, $b);
$kombi = [...$a, ...$b]; // Spread-Operator (PHP 7.4+)
Destructuring
// Liste
[$erster, $zweiter] = $sprachen;
// Assoziativ (PHP 7.1+)
['name' => $name, 'alter' => $alter] = $user;
// In foreach
foreach ($users as ['name' => $name, 'email' => $email]) {
// ...
}Häufige Fragen
Wie prüfe ich, ob ein Array assoziativ oder indexiert ist?
Seit PHP 8.1 mit array_is_list($a) — true, wenn Schlüssel 0..n-1 sind. Vor 8.1: array_keys($a) === range(0, count($a)-1).
Wie merge ich zwei Arrays?
Numerisch indexierte: array_merge($a, $b) hängt an. Assoziative: ebenfalls array_merge — gleiche String-Keys werden überschrieben. Alternativ Spread: [...$a, ...$b] (PHP 8.1+ auch mit String-Keys).
Was ist der Unterschied zwischen <code>array_map</code> und <code>array_walk</code>?
array_map gibt ein neues Array zurück (immutable-Stil). array_walk mutiert das Original per Referenz und gibt bool zurück. Für funktionalen Code immer array_map.
Wie sortiere ich ein Array, ohne die Schlüssel zu verlieren?
Statt sort() (resettet Schlüssel): asort() sortiert nach Werten, ksort() nach Schlüsseln. Beide behalten die Zuordnung.
Welche Array-Funktion ersetzt verschachteltes <code>foreach</code>?
array_reduce() für Aggregationen, array_combine() für Zip-Operationen und array_column(), um aus einem Array von Zeilen eine Spalte zu extrahieren — spart viele Schleifen.