Функция PHP array_column()
Функция PHP array_column() извлекает значения из одного столбца многомерного массива и возвращает их в виде нового массива.
Функция PHP array_column() извлекает значения одного столбца из многомерного массива (или массива объектов) и возвращает их в виде нового плоского массива. Это одна из наиболее полезных функций для работы с массивами, когда данные поступают из базы данных, CSV-файла или JSON API в виде списка записей, — она позволяет извлечь нужное поле в одну строку, не прибегая к циклу foreach.
В этой главе рассматривается синтаксис функции, поведение необязательного параметра index_key (переиндексация результата), работа с массивами объектов и отсутствующими ключами, типичные варианты использования и подводные камни. Для более широкого контекста смотрите PHP Arrays и Multidimensional Arrays.
Что такое функция array_column()?
Функция array_column() — это встроенная функция PHP, предназначенная для извлечения значений из массива и возврата их в виде нового массива. Она принимает два обязательных параметра: массив, из которого нужно извлечь значения, и ключ (или столбец), который требуется извлечь. Функция возвращает новый массив, содержащий только значения из указанного столбца.
Вот базовый синтаксис функции array_column():
Синтаксис функции PHP array_column
array_column(array, column_key, [index_key]);array: Массив, из которого нужно извлечь значения.column_key: Ключ (или столбец), который требуется извлечь.index_key(необязательный): Ключ, значение которого используется как индекс (ключ) возвращаемого массива. Передайтеnullдляcolumn_key(начиная с PHP 7.0), чтобы вернуть целые строки, переиндексированные поindex_key.
Функция возвращает совершенно новый массив и никогда не изменяет исходный. Она работает с массивами, элементами которых являются массивы или объекты с публичными свойствами.
Как использовать функцию array_column()
Использовать функцию array_column() очень просто. Достаточно передать массив и ключ, который нужно извлечь. Вот пример, демонстрирующий применение array_column():
Пример PHP функции 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);
?>Вывод этого кода будет следующим:
Array
(
[0] => John
[1] => Jane
[2] => Jim
)В этом примере функция array_column() извлекла значения из столбца name и вернула их в виде нового массива с числовыми индексами.
Использование параметра index_key
Параметр index_key позволяет указать ключ, который будет использоваться в качестве индекса возвращаемого массива. Вот пример, демонстрирующий применение параметра index_key:
Пример PHP функции 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', 'id');
print_r($names);
?>Вывод этого кода будет следующим:
Array
(
[1] => John
[2] => Jane
[3] => Jim
)В этом примере array_column() извлекла значения из столбца name и использовала столбец id в качестве ключа каждой записи в возвращаемом массиве. Это самый быстрый способ построить таблицу поиска с ключом по ID.
Возврат целых строк при null в column_key
Начиная с PHP 7.0, в качестве column_key можно передать null. В этом случае функция сохраняет каждую строку целиком, но переиндексирует результат по index_key. Это удобно, когда нужна карта записей по ID, а не одно поле:
<?php
$data = [
['id' => 1, 'name' => 'John', 'age' => 30],
['id' => 2, 'name' => 'Jane', 'age' => 25],
];
$byId = array_column($data, null, 'id');
print_r($byId);
?>Работа с массивами объектов
array_column() также читает публичные свойства объектов, поэтому её можно использовать со списком экземпляров модели точно так же, как и с массивами:
<?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'));
?>Подводные камни
- Отсутствующие ключи пропускаются молча. Если строка не содержит
column_key, она просто не включается в результат — предупреждение не выдаётся. Аналогично, строка безindex_keyполучает последовательный числовой ключ. - Дублирующиеся значения
index_keyперезаписывают друг друга. Поскольку ключи должны быть уникальными, если две строки имеют одинаковыйindex_key, выживет только последняя из них. - Читаются только публичные свойства объекта. Защищённые и приватные свойства игнорируются, если только класс не реализует магические методы доступа.
Варианты использования array_column()
Функция array_column() может применяться в самых разных ситуациях, когда нужно извлечь значения из массивов и вернуть их в виде нового массива. Вот несколько типичных вариантов использования:
- Извлечение значений из многомерных массивов для создания простого списка
- Создание ассоциативного массива из многомерного массива
- Преобразование многомерного массива в одномерный для использования в выпадающем списке или другом элементе формы
Если помимо извлечения нужно преобразовать каждое значение, используйте array_map(); чтобы оставить только строки, удовлетворяющие условию, смотрите array_filter().
Заключение
Функция array_column() — лаконичный инструмент для извлечения одного столбца из многомерных массивов и массивов объектов. Необязательный параметр index_key позволяет переиндексировать результат за один шаг, а null в качестве column_key — строить карты целых записей. Использование этой функции вместо ручного цикла foreach делает код обработки данных короче и понятнее.