Функция `array_column()` — это незаменимый помощник при работе с многомерными массивами, особенно с теми, которые вы получаете из базы данных. Вместо того чтобы писать цикл `foreach` для извлечения значений одного поля (например, списка всех email-адресов пользователей), вы можете сделать это одной строкой кода.
Эта функция позволяет не только "вытащить" колонку данных, но и использовать значения из другой колонки в качестве ключей для нового массива. Это невероятно удобно для быстрого создания ассоциативных массивов для поиска. В этом уроке мы пройдем от простого извлечения данных до создания удобных для работы структур, решая практические задачи.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Основы: извлечение одной колонки
У нас есть массив пользователей, где каждый пользователь представлен ассоциативным массивом. Ваша задача — получить простой массив, содержащий только имена всех пользователей. Заполните пропуски, чтобы вызвать нужную функцию и указать, какую "колонку" данных нужно извлечь.
<?php
$users = [
['id' => 101, 'name' => 'Alice', 'email' => 'alice@example.com'],
['id' => 102, 'name' => 'Bob', 'email' => 'bob@example.com'],
['id' => 103, 'name' => 'Charlie', 'email' => 'charlie@example.com'],
];
// Получаем массив, состоящий только из имён
$names = input1S($users, input2S);
print_r($names);
?>Что выведет код?
Теперь давайте извлечем другую колонку из того же массива данных. Проанализируйте код, который получает все значения из колонки 'id', и выберите правильный вариант вывода.
<?php
$users = [
['id' => 101, 'name' => 'Alice'],
['id' => 102, 'name' => 'Bob'],
['id' => 103, 'name' => 'Charlie'],
];
$ids = array_column($users, 'id');
print_r($ids);
?>Исправьте несуществующий ключ
Программист пытался извлечь колонку `email`, но в одном из вложенных массивов этого ключа нет. Это приведет к тому, что данный элемент будет пропущен. Однако, в коде допущена еще одна ошибка: опечатка в имени ключа. Исправьте ее, чтобы получить email-адреса из всех возможных записей.
<?php$records = [ ['id' => 1, 'email' => 'one@test.com'], ['id' => 2, 'name' => 'no-email-here'], ['id' => 3, 'email' => 'three@test.com'],]; $emails = array_column($records, 'e-mail'); print_r($emails);?>Индексация по другой колонке
Одна из самых полезных возможностей `array_column()` — использование третьейго аргумента для указания ключа-индекса. Ваша задача — получить массив имен продуктов, где ключами будут их ID. Перетащите правильные названия колонок из банка в пропуски.
<?php
$products = [
['id' => 55, 'name' => 'Keyboard', 'price' => 75],
['id' => 56, 'name' => 'Mouse', 'price' => 25],
['id' => 57, 'name' => 'Monitor', 'price' => 200],
];
// Получаем массив имён, индексированный по ID
$product_names = array_column(
$products,
input1S,
input2S
);
print_r($product_names);
?>Результат индексации по имени
Давайте усложним. Теперь мы хотим получить массив, где значениями будут email-адреса, а ключами — имена пользователей. Проанализируйте код и выберите, какой ассоциативный массив будет создан.
<?php
$users = [
['id' => 101, 'name' => 'Alice', 'email' => 'alice@example.com'],
['id' => 102, 'name' => 'Bob', 'email' => 'bob@example.com'],
['id' => 103, 'name' => 'Charlie', 'email' => 'charlie@example.com'],
];
$emails_by_name = array_column($users, 'email', 'name');
print_r($emails_by_name);
?>Дублирующиеся ключи индексации
Что произойдет, если в колонке, используемой для индексации, окажутся дублирующиеся значения? В этом коде мы пытаемся получить массив городов, индексированный по странам, но для 'USA' есть две записи. Что в итоге выведет `echo $cities_by_country['USA'];`?
<?php
$data = [
['country' => 'USA', 'city' => 'New York'],
['country' => 'France', 'city' => 'Paris'],
['country' => 'USA', 'city' => 'Washington'],
];
$cities_by_country = array_column($data, 'city', 'country');
echo $cities_by_country['USA'];
?>