PHP: Функции
2026-02-26 15:00 Diff

Первая функция из золотой тройки называется map. Ее название переводится на русский как отображение, что точно отражает суть этой операции. Если в программировании говорят об отображении, то всегда подразумевают функцию map. Ее можно найти практически в любом языке, и везде это будет одна и та же операция.

В PHP она имеет немного другое название — array_map.

Попробуем прийти к этой функции через примеры. Возьмем список пользователей из предыдущего урока и извлечем из него имена всех пользователей:

Здесь мы видим обычную агрегацию с использованием foreach.

В некоторых ситуациях можно использовать функцию array_column, которая возвращает массив значений по ключу.

А что если мы захотим извлечь возраст? Повторяем:

В примерах выше легко увидеть закономерность. Программа выполняет один и тот же проход по циклу и собирает результат в переменную $result. Единственное, что меняется — значение, которое мы извлекаем из элементов исходного массива. Именно этот паттерн называется отображением.

Теперь посмотрим, как выполнить ту же самую операцию с помощью array_map:

Функция array_map принимает два параметра:

  • Колбэк-функцию
  • Коллекцию, которая будет отображаться

Дальше внутри себя array_map делает перебор элементов переданной коллекции и для каждого элемента вызывает колбэк-функцию. На вход этой функции передается элемент исходного массива, а ее результат записывается в новый массив, который и возвращается наружу.

Проговорим несколько неочевидных моментов, связанных с array_map и операцией отображения:

  • Возвращаемый массив всегда такого же размера, как и исходный, потому что array_map отображает каждый элемент исходного массива в элемент возвращаемого
  • Внутри анонимной функции можно выполнять любые вычисления, а не только возвращать часть исходного элемента
  • Функция array_map полностью скрывает от нас наличие обхода и процесс сборки нового массива

Рассмотрим типичный пример, который любят приводить в документации функции map в разных языках программирования. Это применение некоторой арифметической операции к каждому элементу коллекции:

Пример выглядит искусственно, но хорошо отражает суть операции.

А теперь рассмотрим реализацию:

Перейдем к главному отличию myMap от ручного обхода массива. Дело в том, что функция myMap не знает, что нужно сделать с каждым элементом массива. Поэтому она принимает первым аргументом функцию, которую вызывает для каждого элемента исходного массива, а результат вызова записывается в выходной массив. Функция myMap не знает, чем будет этот результат — ей этого знать не нужно. Ответственность за обработку лежит на пользователях.