Использует ли функция `array_map()` callback-функцию?

«Использует ли функция `array_map()` callback-функцию?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, обязательно. Функция array_map() применяет переданную callback-функцию ко всем элементам одного или нескольких массивов. Это основа её работы.

Базовый пример с одним массивом:

$numbers = [1, 2, 3, 4];
$squared = array_map(fn($n) => $n ** 2, $numbers); // Используем стрелочную функцию (PHP 7.4+)
// $squared = [1, 4, 9, 16]

Практический пример из проекта: Мы использовали array_map() для нормализации данных, полученных из API, перед сохранением в БД.

$rawUsers = fetchUsersFromApi(); // Возвращает массив ассоциативных массивов
$normalizedUsers = array_map(function($rawUser) {
    return [
        'id' => (int) $rawUser['UserId'],
        'email' => strtolower(trim($rawUser['ContactEmail'])),
        'name' => ucwords($rawUser['FullName']),
        'created_at' => date('Y-m-d H:i:s', strtotime($rawUser['RegistrationDate']))
    ];
}, $rawUsers);
// $normalizedUsers теперь содержит унифицированную структуру

Важные нюансы:

  1. Можно передавать несколько массивов. Callback получит соответствующие элементы из каждого массива за одну итерацию.
    $a = [1, 2];
    $b = [3, 4];
    $sums = array_map(fn($x, $y) => $x + $y, $a, $b);
    // $sums = [4, 6]
  2. Если передать null в качестве callback, это создаст «зиппированный» массив (массив массивов), что может быть полезно для трансформации данных.
  3. Ключи исходного массива сохраняются только если передан один массив. При работе с несколькими массивами результирующий массив будет с числовыми индексами.