Функция array_map()

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

Тренажер PHP

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

В этом уроке мы пройдем путь от самых основ до продвинутых техник использования `array_map()`. Вы научитесь применять как встроенные, так и анонимные функции, а также обрабатывать несколько массивов одновременно. Задания построены так, чтобы вы постепенно осваивали материал, решая практические задачи: от простого преобразования чисел до объединения данных из разных источников.

Список тем

Основы array_map: возведение в квадрат

id: 38976_task1

Даны массив чисел и функция, которая возводит число в квадрат. Ваша задача — применить эту функцию ко всем элементам массива, используя `array_map`. Заполните пропуски в коде, чтобы получить новый массив с числами, возведенными в квадрат.

Заполните пропуски
<?php
$numbers = [1, 2, 3, 4, 5];

function square($n) {
    return $n * $n;
}

$squared_numbers = input1S('square', input2S);

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

Применение встроенной функции: strtoupper

id: 38976_task2

Функция `array_map()` прекрасно работает и со встроенными функциями PHP. Преобразуйте все элементы массива `$words` в верхний регистр, используя `array_map` и подходящую встроенную функцию из банка токенов.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$words = ['first', 'second', 'third'];

// Преобразуем все слова в верхний регистр
$upper_words = array_map(input1S, input2S);

print_r($upper_words);
?>
'strtoupper'
$words
'strtolower'
$upper_words
ucfirst
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте порядок аргументов

id: 38976_task3

Программист допустил распространенную ошибку: перепутал порядок аргументов в функции `array_map`. Сначала должна идти callback-функция, а затем — массив. Найдите строку с ошибкой и исправьте её.

Найдите ошибку и исправьте
<?php
function double_value($v) {
    return $v * 2;
}
 
$values = [10, 20, 30];
$doubled = array_map($values, 'double_value');
 
print_r($doubled);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выведет код с анонимной функцией?

id: 38976_task4

В этом примере для преобразования массива используется анонимная функция (замыкание). Она добавляет к каждой строке префикс "item: ". Внимательно проанализируйте код и выберите, какой массив будет выведен в результате.

Выберите правильный вариант ответа
<?php
$items = ['apple', 'banana', 'cherry'];

$prefixed_items = array_map(function($item) {
    return "item: " . $item;
}, $items);

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

Сборка скрипта с arrow-функцией

id: 38976_task5

Соберите из фрагментов кода работающий скрипт. Цель скрипта — используя короткую стрелочную функцию (доступна с PHP 7.4), преобразовать массив цен, добавив к каждой 20% НДС. Итоговый массив нужно вывести на экран.

Перетяните в правильном порядке строки из одного блока в другой
print_r($prices_with_vat);
$prices = [100, 200, 50];
<?php
$prices_with_vat = array_map(fn($price) => $price * 1.2, $prices);
?>
echo $prices[0];
fn($price) => $price + 1.2;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что будет в результате обработки двух массивов?

id: 38976_task6

Функция `array_map` может обрабатывать несколько массивов одновременно. В этом случае callback-функция получит столько аргументов, сколько массивов было передано. Предскажите, что выведет код, который "склеивает" элементы из двух массивов.

Что должно получиться?
<?php
$keys = ['id', 'name', 'status'];
$values = [101, 'product', 'active'];

$combined = array_map(function($k, $v) {
    return $k . "-" . $v;
}, $keys, $values);

// Что будет вторым элементом (с индексом 1) нового массива?
echo $combined[1];
?>
Сообщения
Проверить
Показать подсказку

Продвинутый случай: array_map с null

id: 38976_task7

Это нестандартное, но полезное применение `array_map`. Если в качестве callback-функции передать `null`, она объединит элементы из нескольких массивов в подмассивы. Проанализируйте код и выберите, какую структуру данных он создаст.

Выберите правильный вариант ответа
<?php
$numbers = [1, 2];
$letters = ['a', 'b'];
$symbols = ['!', '@'];

$grouped = array_map(null, $numbers, $letters, $symbols);

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

array_map и ключи ассоциативного массива

id: 38976_task8

Можно ли с помощью `array_map` работать одновременно с ключами и значениями ассоциативного массива? Да, если предварительно извлечь ключи в отдельный массив. Завершите код, который форматирует каждую пару ключ-значение в строку "key = value".

Заполните пропуски
<?php
$user_data = ['id' => 123, 'login' => 'admin', 'role' => 'editor'];

$formatted = array_map(
    function($key, $value) {
        return "$key = $value";
    },
    input1S($user_data),
    input2S
);

print_r($formatted);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру