Menu

PHP array_column(): eine Spalte aus Zeilen holen

array_column($rows, 'email') liefert das Feld email jeder Zeile als flaches Array. Hier: das Argument für den Index-Schlüssel, Zeilen nach ID neu indizieren, Verwendung mit Objekten und eine Zeile mit array_search finden.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

array_column($rows, $column) liefert den Wert von $column aus jeder Zeile einer Liste von Zeilen. Es macht aus einer Tabelle von Datensätzen ein flaches Array eines Felds, und genau das brauchst du vor implode, in_array, array_sum oder array_search.

Die Zeilen können von überall kommen: aus einer dekodierten JSON-Antwort, einer CSV-Datei oder einer Datenbankabfrage, die ein Array von assoziativen Arrays geliefert hat.

Mit dem Index-Schlüssel Schlüssel/Wert-Paare bauen

Das dritte Argument nennt ein Feld, dessen Wert zum Schlüssel jedes Ergebnisses wird. array_column($users, 'name', 'id') ist der übliche Weg, eine Zuordnung von ID zu Name zu bauen, etwa für eine <select>-Liste.

Wenn zwei Zeilen denselben Indexwert haben, überschreibt die spätere Zeile die frühere.

Ganze Zeilen mit null nach ID indizieren

Übergib null als Spalte, um jede vollständige Zeile zu behalten, neu verschlüsselt nach dem Indexfeld. Eine Zeile über ihre ID nachzuschlagen ist dann ein direkter Schlüsselzugriff statt einer Schleife.

Bau den Index einmal, und jeder spätere Lookup geht sofort, was zählt, wenn du in einer Schleife viele IDs nachschlägst.

Eine Zeile mit array_column und array_search finden

Um herauszufinden, welche Zeile einen bestimmten Wert hat, durchsuchst du die Spalte und verwendest die Position, die du zurückbekommst. Prüfe das Ergebnis mit !== false, denn ein Treffer in der ersten Zeile liefert 0.

Das setzt voraus, dass $users die Schlüssel 0, 1, 2 hat, weil array_column eine Liste liefert. Wurde das Array gefiltert und hat Lücken, rufst du vorher array_values($users) auf. Die Seite zu array_search behandelt die Falle false gegen 0 im Detail.

Eine Spalte summieren, zählen oder mitteln

array_column passt gut zu den Mathe-Helfern: Feld herausziehen, dann aufaddieren.

Für einen Wert, der aus mehreren Feldern berechnet wird, etwa Menge mal Preis, ist array_map das Werkzeug, wie in der letzten Zeile.

array_column mit Objekten

Bei einer Liste von Objekten liest array_column öffentliche Eigenschaften. Private und geschützte Eigenschaften sieht es nicht.

Der zweite Aufruf liefert ein leeres Array: password ist privat, also wird jedes Objekt übersprungen.

Zeilen ohne das Feld werden übersprungen

array_column setzt keinen Platzhalter für eine Zeile ein, der das Feld fehlt. Das Ergebnis kann kürzer sein als die Eingabe, sodass seine Positionen nicht mehr zu den Zeilen passen.

Das erste Ergebnis hat zwei Telefonnummern und keinen Hinweis darauf, dass Bob keine hatte. Mit dem Namen als Index-Schlüssel siehst du, wem welche Nummer gehört, und das ist die sicherere Form, wann immer manchen Zeilen das Feld fehlen kann.

Häufig gestellte Fragen

Was macht array_column in PHP?

Es nimmt eine Liste von Zeilen (Arrays oder Objekte) und liefert aus jeder Zeile den Wert eines Felds: array_column($users, 'email') ergibt ein flaches Array von E-Mails. Zeilen ohne dieses Feld werden übersprungen.

Wie mache ich aus Zeilen ein Schlüssel/Wert-Array?

Übergib das Schlüsselfeld als drittes Argument: array_column($users, 'name', 'id') liefert [id => name, ...]. Übergib null als zweites Argument, array_column($users, null, 'id'), um ganze Zeilen nach ID indiziert zu behalten.

Was macht array_column, wenn einer Zeile das Feld fehlt?

Es überspringt diese Zeile, also kann array_column($people, 'phone') weniger Werte liefern, als es Zeilen gibt, und die Positionen passen nicht mehr. Füge einen Index-Schlüssel hinzu, array_column($people, 'phone', 'name'), um zu sehen, aus welcher Zeile jeder Wert stammt.

Funktioniert array_column mit Objekten?

Ja, bei einem Array von Objekten liest es öffentliche Eigenschaften und außerdem Eigenschaften, die über __get bereitgestellt werden, wenn die Klasse __isset definiert. Private und geschützte Eigenschaften werden übersprungen.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S