Array map: примеры (PHP)

Функция array_map в PHP: практическое применение
Раздел: Работа с массивами
array_map(callable|null $callback, array $array, array ...$arrays): array
Описание функции array_map в PHP

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

Аргументы функции

Функция принимает от двух до нескольких аргументов:

  • $callback: Вызываемая функция. Может быть строкой с именем функции, анонимной функцией или массивом для вызова методов классов.
  • ...$arrays: Один или несколько массивов, которые обрабатываются. Если передано несколько массивов, callback-функция получает соответствующее количество аргументов.

Функция не имеет специальных флагов, но поддерживает передачу нескольких массивов для параллельной обработки.

Примеры применения array_map
Применение к одному массиву
$numbers = [1, 2, 3, 4];
$result = array_map(fn($n) => $n * 2, $numbers);
print_r($result);
Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
)
Обработка нескольких массивов
$a = [1, 2, 3];
$b = [4, 5, 6];
$result = array_map(fn($x, $y) => $x + $y, $a, $b);
print_r($result);
Array
(
    [0] => 5
    [1] => 7
    [2] => 9
)
Использование именованной функции
function square($n) {
    return $n ** 2;
}
$data = [2, 4, 6];
$result = array_map('square', $data);
print_r($result);
Array
(
    [0] => 4
    [1] => 16
    [2] => 36
)
Похожие функции в PHP

В PHP существуют другие функции для обработки массивов:

array_walk

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

Фильтрует элементы массива с помощью callback-функции, возвращая только элементы, для которых функция вернула true. Используется для выборки данных.

Итеративно уменьшает массив к одному значению с помощью callback-функции. Применяется для вычисления агрегатных значений.

Типичные ошибки
Передача неверного callback
$result = array_map('undefined_function', [1, 2]);
// Вызовет ошибку
Warning: array_map() expects parameter 1 to be a valid callback, function 'undefined_function' not found...
Несоответствие размеров массивов
$a = [1, 2, 3];
$b = [4, 5];
$result = array_map(fn($x, $y) => $x + $y, $a, $b);
print_r($result);
Array
(
    [0] => 5
    [1] => 7
    [2] => 3  // Третий элемент $b считается NULL
)
Игнорирование возвращаемого значения

Функция возвращает новый массив, поэтому присвоение результата обязательно для дальнейшего использования.

Изменения в последних версиях PHP

В PHP 8.0 была изменена обработка несуществующих callback-функций: теперь выбрасывается TypeError вместо предупреждения. В PHP 8.1 добавлена поддержка использования объекта с методом __invoke в качестве callback.

Расширенные примеры использования
Обработка массива объектов
Пример php
class User {
    public function __construct(public string $name) {}
}
$users = [new User('Анна'), new User('Иван')];
$names = array_map(fn($user) => $user->name, $users);
print_r($names);
Array
(
    [0] => Анна
    [1] => Иван
)
Создание ассоциативного массива
Пример php
$keys = ['id', 'name'];
$values = [1, 'Тест'];
$result = array_map(null, $keys, $values);
print_r($result);
Array
(
    [0] => Array
        (
            [0] => id
            [1] => 1
        )
    [1] => Array
        (
            [0] => name
            [1] => Тест
        )
)
Обработка с сохранением ключей
Пример php
$data = ['a' => 1, 'b' => 2];
$result = array_map(fn($v) => $v * 10, $data);
print_r($result);
Array
(
    [a] => 10
    [b] => 20
)
Аналоги в других языках
JavaScript: map
const numbers = [1, 2, 3];
const result = numbers.map(n => n * 2);
console.log(result);
[2, 4, 6]
Python: map
numbers = [1, 2, 3]
result = list(map(lambda n: n * 2, numbers))
print(result)
[2, 4, 6]
MySQL: нет прямого аналога

В MySQL подобная операция выполняется через построчные запросы или операции с JSON-полями, но встроенной функции для отображения массива нет.

PHP array_map function comments

En
Array map Applies the callback to the elements of the given arrays