array_column

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

array_columnLiefert die Werte einer einzelnen Spalte eines Arrays

Beschreibung

array_column(array$array, int|string|null$column_key, int|string|null$index_key = null): array

array_column() gibt die Werte einer einzelnen Spalte von array zurück, die durch column_key angegeben wird. Optional kann ein index_key angegeben werden, um die Werte im zurückgegebenen Array durch die Werte der Spalte index_key des angegebenen Arrays zu indizieren.

Parameter-Liste

array

Ein mehrdimensionales Array oder ein Array von Objekten, aus dem eine Spalte von Werten abgerufen werden soll. Wenn ein Array von Objekten angegeben wird, können die öffentlichen Eigenschaften direkt abgerufen werden. Damit geschützte oder private Eigenschaften abgerufen werden können, muss die Klasse die magischen Methoden __get() und __isset() implementieren.

column_key

Die Spalte der zurückzugebenden Werte. Dieser Wert kann ein Integer-Schlüssel der Spalte sein, die abgerufen werden soll, oder der Name eines Zeichenketten-Schlüssels eines assoziativen Arrays oder einer Eigenschaft. Er kann auch null sein, um komplette Arrays oder Objekte zurückzugeben (dies ist in Verbindung mit index_key nützlich, um das Array neu zu indizieren).

index_key

Die Spalte, die als Index/Schlüssel für das zurückgegebene Array verwendet werden soll. Dieser Wert kann der Integer-Schlüssel der Spalte sein oder der Name des Zeichenketten-Schlüssels. Der Wert wird konvertiert wie für Array-Schlüssel üblich (vor PHP 8.0.0 waren jedoch auch Objekte erlaubt, die die Konvertierung in eine Zeichenkette unterstützen).

Rückgabewerte

Gibt ein Array von Werten zurück, das eine einzelne Spalte aus dem angegebenen Array enthält.

Changelog

VersionBeschreibung
8.0.0 Die Objekte der Spalten, die durch den Parameter index_key angegeben werden, werden nicht mehr in Zeichenketten umgewandelt, sondern lösen stattdessen einen TypeError aus.

Beispiele

Beispiel #1 Auslesen der Spalte der Vornamen aus einem Datensatz

<?php
// Ein Array, das einen Datensatz enthält, wie er von einer Datenbank
// stammen könnte
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);

$first_names = array_column($records, 'first_name');
print_r($first_names);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )

Beispiel #2 Abrufen der Spalte der Nachnamen aus einem Datensatz, indiziert durch die Spalte "id"

<?php
// Verwenden des Arrays $records aus Beispiel #1
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe )

Beispiel #3 Abrufen der Spalte mit den Benutzernamen aus der öffentlichen Eigenschaft "username" eines Objekts

<?php

class User
{
public
$username;

public function
__construct(string $username)
{
$this->username = $username;
}
}

$users = [
new
User('user 1'),
new
User('user 2'),
new
User('user 3'),
];

print_r(array_column($users, 'username'));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array ( [0] => user 1 [1] => user 2 [2] => user 3 )

Beispiel #4 Abrufen der Spalte der Namen aus der privaten Eigenschaft "name" eines Objekts mit der magischen Methode __get()

<?php

class Person
{
private
$name;

public function
__construct(string $name)
{
$this->name = $name;
}

public function
__get($prop)
{
return
$this->$prop;
}

public function
__isset($prop) : bool
{
return isset(
$this->$prop);
}
}

$people = [
new
Person('Fred'),
new
Person('Jane'),
new
Person('John'),
];

print_r(array_column($people, 'name'));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array ( [0] => Fred [1] => Jane [2] => John )
Wenn __isset() nicht angegeben wird, wird ein leeres Array zurückgegeben.
To Top