W3docs

Функция 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);

?>
Result

Работа с массивами объектов

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

?>
Result

Подводные камни

  • Отсутствующие ключи пропускаются молча. Если строка не содержит column_key, она просто не включается в результат — предупреждение не выдаётся. Аналогично, строка без index_key получает последовательный числовой ключ.
  • Дублирующиеся значения index_key перезаписывают друг друга. Поскольку ключи должны быть уникальными, если две строки имеют одинаковый index_key, выживет только последняя из них.
  • Читаются только публичные свойства объекта. Защищённые и приватные свойства игнорируются, если только класс не реализует магические методы доступа.

Варианты использования array_column()

Функция array_column() может применяться в самых разных ситуациях, когда нужно извлечь значения из массивов и вернуть их в виде нового массива. Вот несколько типичных вариантов использования:

  • Извлечение значений из многомерных массивов для создания простого списка
  • Создание ассоциативного массива из многомерного массива
  • Преобразование многомерного массива в одномерный для использования в выпадающем списке или другом элементе формы

Если помимо извлечения нужно преобразовать каждое значение, используйте array_map(); чтобы оставить только строки, удовлетворяющие условию, смотрите array_filter().

Заключение

Функция array_column() — лаконичный инструмент для извлечения одного столбца из многомерных массивов и массивов объектов. Необязательный параметр index_key позволяет переиндексировать результат за один шаг, а null в качестве column_key — строить карты целых записей. Использование этой функции вместо ручного цикла foreach делает код обработки данных короче и понятнее.

Практика

Практика
Какова функция array_column() в PHP?
Какова функция array_column() в PHP?
Was this page helpful?