Menu

PHP array_column(): один столбец из строк массива

array_column($rows, 'email') возвращает поле email каждой строки в виде плоского массива. Аргумент ключа индекса, переиндексация строк по id, работа с объектами и поиск строки через array_search.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

array_column($rows, $column) возвращает значение $column из каждой строки списка строк. Она превращает таблицу записей в плоский массив одного поля, а это то, что нужно перед implode, in_array, array_sum или array_search.

Строки могут прийти откуда угодно: из декодированного JSON-ответа, CSV-файла или запроса к базе данных, который вернул массив ассоциативных массивов.

Ключ индекса для пар ключ и значение

Третий аргумент называет поле, значение которого становится ключом каждого результата. array_column($users, 'name', 'id') это обычный способ построить справочник id и имени, например для списка <select>.

Если у двух строк одинаковое значение индекса, более поздняя строка перезаписывает более раннюю.

Целые строки по id через null

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

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

Поиск строки через array_column и array_search

Чтобы найти, в какой строке есть нужное значение, ищите по столбцу и используйте полученную позицию. Проверяйте результат через !== false, потому что совпадение в первой строке возвращает 0.

Это работает, только если у $users ключи 0, 1, 2, потому что array_column возвращает список. Если массив фильтровали и в нём есть пропуски, сначала вызовите array_values($users). Ловушка false и 0 подробно разобрана на странице array_search.

Сумма, количество или среднее по столбцу

array_column хорошо сочетается с математическими функциями: извлеките поле и сложите его.

Для значения, которое вычисляется из нескольких полей, например количество на цену, подходит array_map, как в последней строке.

array_column с объектами

Со списком объектов array_column читает публичные свойства. Закрытые и защищённые свойства ей не видны.

Второй вызов возвращает пустой массив: password закрытое свойство, поэтому каждый объект пропускается.

Строки без поля пропускаются

array_column не подставляет заполнитель для строки, в которой нет поля. Результат может оказаться короче входных данных, и его позиции перестают совпадать со строками.

В первом результате два телефона и никакого намёка на то, что у Bob его не было. С именем в качестве ключа индекса видно, чей номер чей, и это более безопасная форма всякий раз, когда в некоторых строках поля может не быть.

Часто задаваемые вопросы

Что делает array_column в PHP?

Берёт список строк (массивов или объектов) и возвращает значение одного поля из каждой строки: array_column($users, 'email') даёт плоский массив адресов email. Строки, в которых нет этого поля, пропускаются.

Как сделать массив ключ/значение из строк?

Передайте поле для ключа третьим аргументом: array_column($users, 'name', 'id') возвращает [id => name, ...]. Передайте null вторым аргументом, array_column($users, null, 'id'), чтобы сохранить целые строки, проиндексированные по id.

Что делает array_column, если в строке нет поля?

Пропускает эту строку, поэтому array_column($people, 'phone') может вернуть меньше значений, чем строк, и позиции перестают совпадать. Добавьте ключ индекса, array_column($people, 'phone', 'name'), чтобы видеть, из какой строки пришло каждое значение.

Работает ли array_column с объектами?

Да, с массивом объектов она читает публичные свойства, а также свойства, доступные через __get, если класс определяет __isset. Закрытые и защищённые свойства пропускаются.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ