Arrays in PHP elegant verarbeiten – array_map, array_filter und array_column
Statt for-Schleifen mit Zwischenarrays formst du Daten in PHP direkt um: array_map wandelt, array_filter siebt, array_column zieht eine Spalte, array_sum rechnet. Ich zeige die vier an einem typischen Datensatz aus der Datenbank.
Nach einer Datenbank-Abfrage habe ich meist ein Array aus Zeilen (jede Zeile ein assoziatives Array). Zum Aufbereiten für die Ausgabe nutze ich vier PHP-Funktionen, die verschachtelte Schleifen überflüssig machen.
Der Datensatz
$orders = [
['id' => 1, 'kunde' => 'Mia', 'betrag' => 90.0, 'bezahlt' => false],
['id' => 2, 'kunde' => 'Tom', 'betrag' => 25.0, 'bezahlt' => true],
['id' => 3, 'kunde' => 'Mia', 'betrag' => 15.0, 'bezahlt' => true],
];Sieben, umwandeln, aufsummieren
// array_filter: nur bezahlte Bestellungen behalten
$bezahlt = array_filter($orders, fn($o) => $o['bezahlt']);
// array_column: nur die Beträge als flache Liste ziehen
$betraege = array_column($bezahlt, 'betrag'); // [25.0, 15.0]
// array_sum: aufsummieren
$umsatz = array_sum($betraege); // 40.0
// array_map: jede Zeile in eine Anzeige-Zeichenkette umwandeln
$labels = array_map(fn($o) => "{$o['kunde']}: {$o['betrag']} €", $orders);array_filter behält Elemente, für die die Funktion true liefert. array_map gibt für jedes Element einen neuen Wert zurück. array_column ist der Geheimtipp bei DB-Zeilen: Es zieht eine einzelne Spalte heraus.
Zwei nützliche Kniffe
// array_column kann auch nach einem Schlüssel indexieren:
$byId = array_column($orders, null, 'id'); // [1 => [...], 2 => [...], 3 => [...]]
$eine = $byId[2]; // direkter Zugriff statt Suchschleife
// Nach array_filter die Indizes zurücksetzen (0,1,2 …):
$bezahlt = array_values(array_filter($orders, fn($o) => $o['bezahlt']));Der zweite Punkt ist eine häufige Stolperfalle: array_filter behält die alten Schlüssel. Für eine saubere, fortlaufend nummerierte Liste (etwa für json_encode als Array) wickelst du das Ergebnis in array_values.
Diese Funktionen halten meinen PHP-Code frei von Schleifen-Ballast. Mehr Snippets findest du auf code.bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
First-Class-Callable-Syntax in PHP: aus strlen(...) wird ein echter Wert
Funktionen als Zeichenketten weiterzureichen – 'strlen', [$objekt, 'methode'] – hat nie jemand gemocht: kein Tippfehlerschutz, keine Sprungmarke in der IDE. Seit PHP 8.1 schreibst du drei Punkte und bekommst ein Closure-Objekt.
array_find, array_any und array_all in PHP 8.4 – Arrays durchsuchen ohne Schleife
„Gibt es einen inaktiven Eintrag?", „Sind alle bezahlt?", „Hol mir den ersten Treffer" – dafür hast du bisher eine foreach-Schleife mit break geschrieben. PHP 8.4 macht daraus je eine Zeile, die genau sagt, was sie meint.
@layer in CSS: Kaskadenebenen statt !important-Wettrüsten
Irgendwann steht in jedem gewachsenen Stylesheet das erste !important – und ein halbes Jahr später das dreißigste. Mit @layer legst du die Reihenfolge einmal fest, und ab da gewinnt nicht mehr der längste Selektor, sondern die Ebene, die du bestimmt hast.