array_column

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

array_columnВозвращает массив из значений одного столбца входного массива

Описание

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

Функция array_column() возвращает значения из одного столбца массива array, который идентифицируется ключом column_key. Необязательный параметр index_key индексирует значения выходного массива значениями столбца index_key входного массива.

Список параметров

array

Многомерный массив или массив объектов, из которого вытягивается столбец значений. При передаче массива объектов функция вытянет из объектов только общедоступные свойства. Для вытягивания защищённых или закрытых свойств потребуется реализовать в классе оба магических метода — __get() и __isset().

column_key

Столбец, значения которого требуется вернуть. В аргументе передают либо целочисленный ключ столбца, значения которого требуется получить, либо название строкового ключа ассоциативного массива или свойства объекта. В параметр передают значение null, чтобы вернуть массивы или объекты целиком, что полезно при одновременной передаче аргумента index_key для переиндексации выходного массива.

index_key

Столбец, значения которого станут ключами или индексами возвращаемого массива. В аргументе передают либо целочисленный ключ столбца, либо название строкового ключа. Значение приводится стандартным для ключей массива способом, а до PHP 8.0.0 также разрешались объекты, которые поддерживают преобразование в строку.

Возвращаемые значения

Функция возвращает массив значений, которые представляют один столбец из входного массива.

Список изменений

Версия Описание
8.0.0 Функция больше не приводит к строке объекты в столбцах, которые обозначили аргументом index_key, а вместо этого выбрасывает ошибку TypeError.

Примеры

Пример #1 Пример получения столбца с именами из набора записей

<?php

// Массив с набором записей, похожих на те, которые возвращает база данных
$records = [
[
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
],
[
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
],
[
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
],
[
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
]
];

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

?>

Результат выполнения приведённого примера:

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

Пример #2 Пример получения столбца с фамилиями из набора записей и индексации фамилий значениями столбца "id"

<?php

// Возьмём массив $records из первого примера
$records = [
[
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
],
[
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
],
[
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
],
[
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
]
];

$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);

?>

Результат выполнения приведённого примера:

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

Пример #3 Пример получения столбца с именами пользователей из открытого свойства объекта "username"

<?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'));

?>

Результат выполнения приведённого примера:

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

Пример #4 Пример получения столбца с именами из закрытого свойства объекта "name" путём определения магических методов __isset() и __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'));

?>

Результат выполнения приведённого примера:

Array
(
    [0] => Fred
    [1] => Jane
    [2] => John
)
Функция вернёт пустой массив, если класс объекта не содержит определения магического метода __isset().