Функция `array_map()` — это один из самых элегантных способов обработки массивов в PHP. Вместо того чтобы писать громоздкие циклы `foreach`, вы можете применить определенную callback-функцию к каждому элементу массива и получить на выходе новый, преобразованный массив. Это делает код чище и выразительнее.
В этом уроке мы пройдем путь от самых основ до продвинутых техник использования `array_map()`. Вы научитесь применять как встроенные, так и анонимные функции, а также обрабатывать несколько массивов одновременно. Задания построены так, чтобы вы постепенно осваивали материал, решая практические задачи: от простого преобразования чисел до объединения данных из разных источников.
- Модуль 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+
Основы array_map: возведение в квадрат
Даны массив чисел и функция, которая возводит число в квадрат. Ваша задача — применить эту функцию ко всем элементам массива, используя `array_map`. Заполните пропуски в коде, чтобы получить новый массив с числами, возведенными в квадрат.
<?php
$numbers = [1, 2, 3, 4, 5];
function square($n) {
return $n * $n;
}
$squared_numbers = input1S('square', input2S);
print_r($squared_numbers);
?>Применение встроенной функции: strtoupper
Функция `array_map()` прекрасно работает и со встроенными функциями PHP. Преобразуйте все элементы массива `$words` в верхний регистр, используя `array_map` и подходящую встроенную функцию из банка токенов.
<?php
$words = ['first', 'second', 'third'];
// Преобразуем все слова в верхний регистр
$upper_words = array_map(input1S, input2S);
print_r($upper_words);
?>Исправьте порядок аргументов
Программист допустил распространенную ошибку: перепутал порядок аргументов в функции `array_map`. Сначала должна идти callback-функция, а затем — массив. Найдите строку с ошибкой и исправьте её.
<?phpfunction double_value($v) { return $v * 2;} $values = [10, 20, 30];$doubled = array_map($values, 'double_value'); print_r($doubled);?>Что выведет код с анонимной функцией?
В этом примере для преобразования массива используется анонимная функция (замыкание). Она добавляет к каждой строке префикс "item: ". Внимательно проанализируйте код и выберите, какой массив будет выведен в результате.
<?php
$items = ['apple', 'banana', 'cherry'];
$prefixed_items = array_map(function($item) {
return "item: " . $item;
}, $items);
print_r($prefixed_items);
?>Сборка скрипта с arrow-функцией
Соберите из фрагментов кода работающий скрипт. Цель скрипта — используя короткую стрелочную функцию (доступна с 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;Что будет в результате обработки двух массивов?
Функция `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
Это нестандартное, но полезное применение `array_map`. Если в качестве callback-функции передать `null`, она объединит элементы из нескольких массивов в подмассивы. Проанализируйте код и выберите, какую структуру данных он создаст.
<?php
$numbers = [1, 2];
$letters = ['a', 'b'];
$symbols = ['!', '@'];
$grouped = array_map(null, $numbers, $letters, $symbols);
print_r($grouped);
?>array_map и ключи ассоциативного массива
Можно ли с помощью `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);
?>