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. Закрытые и защищённые свойства пропускаются.