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