Die PHP-Funktion array_column() verstehen
Die PHP-Funktion array_column() extrahiert Werte aus Arrays und wandelt sie in neue Arrays um. Ideal für Datenbankabfragen, CSV-Dateien und JSON-APIs.
Die PHP-Funktion array_column() extrahiert die Werte einer einzelnen Spalte aus einem mehrdimensionalen array (oder einem array von Objekten) und gibt sie als neues, flaches array zurück. Sie ist eine der nützlichsten array-Funktionen, wenn Sie mit Daten arbeiten, die aus einer Datenbank, einer CSV-Datei oder einer JSON-API als Liste von Datensätzen zurückkommen, denn sie ermöglicht es, das gesuchte Feld in einer einzigen Zeile herauszuziehen – ohne eine foreach-Schleife schreiben zu müssen.
Dieses Kapitel behandelt die Syntax der Funktion, wie der optionale Parameter index_key das Ergebnis neu indiziert, wie sie sich mit arrays von Objekten und fehlenden Schlüsseln verhält, häufige Anwendungsfälle sowie zu beachtende Tücken. Für einen breiteren Kontext siehe PHP Arrays und Multidimensionale Arrays.
Was ist die Funktion array_column()?
Die Funktion array_column() ist eine in PHP eingebaute Funktion, die verwendet wird, um Werte aus einem array zu extrahieren und als neues array zurückzugeben. Sie nimmt zwei erforderliche Parameter entgegen: das array, aus dem Sie Werte extrahieren möchten, und den Schlüssel (oder die Spalte), den Sie extrahieren möchten. Die Funktion gibt ein neues array zurück, das nur die Werte aus der angegebenen Spalte enthält.
Hier ist die grundlegende Syntax der Funktion array_column():
PHP array_column Funktionssyntax
array_column(array, column_key, [index_key]);array: Das array, aus dem Sie Werte extrahieren möchten.column_key: Der Schlüssel (oder die Spalte), den Sie extrahieren möchten.index_key(optional): Der Schlüssel, dessen Wert als Index (Schlüssel) des zurückgegebenen arrays verwendet wird. Übergeben Sienullfürcolumn_key(seit PHP 7.0), um vollständige Zeilen neu indiziert nachindex_keyzurückzugeben.
Die Funktion gibt ein brandneues array zurück; das Original wird niemals verändert. Sie funktioniert mit arrays, deren Elemente selbst arrays oder Objekte mit öffentlichen Eigenschaften sind.
Verwendung der Funktion array_column()
Die Verwendung der Funktion array_column() ist ganz einfach. Sie müssen lediglich ein array und den Schlüssel übergeben, den Sie extrahieren möchten. Hier ist ein Beispiel, das zeigt, wie array_column() verwendet wird:
PHP-Beispiel der Funktion array_column
<?php
$data = [
[
'id' => 1,
'name' => 'John',
'age' => 30,
],
[
'id' => 2,
'name' => 'Jane',
'age' => 25,
],
[
'id' => 3,
'name' => 'Jim',
'age' => 35,
],
];
$names = array_column($data, 'name');
print_r($names);
?>Die Ausgabe dieses Codes wäre:
Array
(
[0] => John
[1] => Jane
[2] => Jim
)In diesem Beispiel hat die Funktion array_column() die Werte aus der Spalte name extrahiert und als neues, numerisch indiziertes array zurückgegeben.
Verwendung des Parameters index_key
Der Parameter index_key ermöglicht es Ihnen, einen Schlüssel als Index des zurückgegebenen arrays anzugeben. Hier ist ein Beispiel, das zeigt, wie der Parameter index_key verwendet wird:
Beispiel der PHP-Funktion array_column mit weiteren Argumenten
<?php
$data = [
[
'id' => 1,
'name' => 'John',
'age' => 30,
],
[
'id' => 2,
'name' => 'Jane',
'age' => 25,
],
[
'id' => 3,
'name' => 'Jim',
'age' => 35,
],
];
$names = array_column($data, 'name', 'id');
print_r($names);
?>Die Ausgabe dieses Codes wäre:
Array
(
[1] => John
[2] => Jane
[3] => Jim
)In diesem Beispiel hat array_column() die Werte aus der Spalte name extrahiert und die Spalte id als Schlüssel jedes Eintrags im zurückgegebenen array verwendet. Dies ist der schnellste Weg, eine nach ID indizierte Nachschlagetabelle aufzubauen.
Ganze Zeilen mit einem null column_key zurückgeben
Seit PHP 7.0 können Sie null als column_key übergeben. Die Funktion behält dann jede vollständige Zeile bei, indiziert das Ergebnis aber neu nach index_key. Das ist praktisch, wenn Sie eine Datensatz-zu-ID-Zuordnung benötigen statt eines einzelnen Feldes:
<?php
$data = [
['id' => 1, 'name' => 'John', 'age' => 30],
['id' => 2, 'name' => 'Jane', 'age' => 25],
];
$byId = array_column($data, null, 'id');
print_r($byId);
?>Arbeiten mit Arrays von Objekten
array_column() liest auch öffentliche Eigenschaften von Objekten, sodass Sie es auf eine Liste von Modellinstanzen genauso verwenden können wie mit arrays:
<?php
class User {
public function __construct(public int $id, public string $name) {}
}
$users = [
new User(1, 'John'),
new User(2, 'Jane'),
];
print_r(array_column($users, 'name', 'id'));
?>Zu beachtende Tücken
- Fehlende Schlüssel werden stillschweigend übersprungen. Wenn eine Zeile
column_keynicht enthält, wird diese Zeile einfach aus dem Ergebnis weggelassen – es wird keine Warnung ausgegeben. Ebenso fällt eine Zeile, der derindex_keyfehlt, auf einen sequenziellen numerischen Schlüssel zurück. - Doppelte
index_key-Werte überschreiben sich gegenseitig. Da Schlüssel eindeutig sein müssen, überlebt bei zwei Zeilen mit demselbenindex_keynur die letzte. - Es werden nur öffentliche Objekteigenschaften gelesen. Geschützte und private Eigenschaften werden ignoriert, es sei denn, die Klasse implementiert magische Zugriffsmethoden.
Anwendungsfälle für array_column()
Die Funktion array_column() kann in verschiedenen Situationen eingesetzt werden, in denen Sie Werte aus arrays extrahieren und als neues array zurückgeben müssen. Hier sind einige häufige Anwendungsfälle:
- Extraktion von Werten aus mehrdimensionalen arrays zur Erstellung einer einfachen Liste
- Erstellen eines assoziativen arrays aus einem mehrdimensionalen array
- Umwandlung eines mehrdimensionalen arrays in ein eindimensionales array zur Verwendung in einer Dropdown-Liste oder einem anderen Formularelement
Wenn Sie jeden Wert beim Extrahieren auch transformieren möchten, greifen Sie auf array_map() zurück; um nur die Zeilen zu behalten, die einer Bedingung entsprechen, siehe array_filter().
Fazit
Die Funktion array_column() ist ein kompaktes Werkzeug zum Extrahieren einer einzelnen Spalte aus mehrdimensionalen arrays und arrays von Objekten. Mit dem optionalen index_key können Sie das Ergebnis in einem Schritt neu indizieren, und mit einem null-column_key können Sie vollständige Datensatz-Nachschlagemaps aufbauen. Der Einsatz dieser Funktion anstelle einer handgeschriebenen foreach-Schleife macht datentransformierenden Code kürzer und leichter lesbar.