Array map: примеры (PHP)
array_map(callable|null $callback, array $array, array ...$arrays): arrayФункция array_map применяет указанную callback-функцию ко всем элементам одного или нескольких массивов. Она возвращает новый массив, содержащий результаты вызова callback-функции для каждого элемента исходных массивов. Использование функции эффективно для обработки данных без изменения исходных массивов и необходимости написания циклов.
Функция принимает от двух до нескольких аргументов:
- $callback: Вызываемая функция. Может быть строкой с именем функции, анонимной функцией или массивом для вызова методов классов.
- ...$arrays: Один или несколько массивов, которые обрабатываются. Если передано несколько массивов, callback-функция получает соответствующее количество аргументов.
Функция не имеет специальных флагов, но поддерживает передачу нескольких массивов для параллельной обработки.
$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 существуют другие функции для обработки массивов:
Функция применяет пользовательскую функцию к каждому элементу массива, но изменяет исходный массив. Предпочтительна для модификации существующего массива.
Фильтрует элементы массива с помощью callback-функции, возвращая только элементы, для которых функция вернула true. Используется для выборки данных.
Итеративно уменьшает массив к одному значению с помощью 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 8.0 была изменена обработка несуществующих callback-функций: теперь выбрасывается TypeError вместо предупреждения. В PHP 8.1 добавлена поддержка использования объекта с методом __invoke в качестве callback.
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] => Иван
)$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] => Тест
)
)$data = ['a' => 1, 'b' => 2];
$result = array_map(fn($v) => $v * 10, $data);
print_r($result);Array
(
[a] => 10
[b] => 20
)const numbers = [1, 2, 3];
const result = numbers.map(n => n * 2);
console.log(result);[2, 4, 6]
numbers = [1, 2, 3]
result = list(map(lambda n: n * 2, numbers))
print(result)[2, 4, 6]
В MySQL подобная операция выполняется через построчные запросы или операции с JSON-полями, но встроенной функции для отображения массива нет.