Функция array_column()

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Функция `array_column()` — это незаменимый помощник при работе с многомерными массивами, особенно с теми, которые вы получаете из базы данных. Вместо того чтобы писать цикл `foreach` для извлечения значений одного поля (например, списка всех email-адресов пользователей), вы можете сделать это одной строкой кода.

Эта функция позволяет не только "вытащить" колонку данных, но и использовать значения из другой колонки в качестве ключей для нового массива. Это невероятно удобно для быстрого создания ассоциативных массивов для поиска. В этом уроке мы пройдем от простого извлечения данных до создания удобных для работы структур, решая практические задачи.

Список тем

Основы: извлечение одной колонки

id: 38980_task1

У нас есть массив пользователей, где каждый пользователь представлен ассоциативным массивом. Ваша задача — получить простой массив, содержащий только имена всех пользователей. Заполните пропуски, чтобы вызвать нужную функцию и указать, какую "колонку" данных нужно извлечь.

Заполните пропуски
<?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);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выведет код?

id: 38980_task2

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

Выберите правильный вариант ответа
<?php
$users = [
    ['id' => 101, 'name' => 'Alice'],
    ['id' => 102, 'name' => 'Bob'],
    ['id' => 103, 'name' => 'Charlie'],
];

$ids = array_column($users, 'id');

print_r($ids);
?>
Сообщения
Проверить
Показать подсказку

Исправьте несуществующий ключ

id: 38980_task3

Программист пытался извлечь колонку `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);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Индексация по другой колонке

id: 38980_task4

Одна из самых полезных возможностей `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);
?>
'name'
'id'
'price'
$products
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат индексации по имени

id: 38980_task5

Давайте усложним. Теперь мы хотим получить массив, где значениями будут 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);
?>
Сообщения
Проверить
Показать подсказку

Дублирующиеся ключи индексации

id: 38980_task6

Что произойдет, если в колонке, используемой для индексации, окажутся дублирующиеся значения? В этом коде мы пытаемся получить массив городов, индексированный по странам, но для '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'];
?>
Сообщения
Проверить
Показать подсказку
🚀 Визуализатор кода
0 / 0
Скорость:
Режим:
💡 Что происходит?
Загрузите пример для начала...
🤔
Проверка знаний
История шагов
Готов
НайтиКурс.Ру