array_map
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_map — Применяет callback-функцию ко всем элементам указанных массивов
Описание
Функция array_map() возвращает массив (array), содержащий
результаты применения callback-функции
к соответствующему индексу array
(и arrays, если указано больше массивов),
используемого в качестве аргумента callback-функции.
Количество параметров, передаваемых callback-функции,
должно совпадать с количеством массивов,
переданным функции array_map().
Список параметров
-
callback -
callable, применяемая к каждому элементу в каждом массиве.
nullможет быть передан в качестве значенияcallbackдля выполнения zip операции с несколькими массивами. Если указан толькоarray, array_map() вернет входной массив. -
array -
Массив, к которому применяется
callback-функция. -
arrays -
Дополнительные массивы для обработки
callback-функцией.
Возвращаемые значения
Возвращает массив, содержащий результаты применения callback-функции к соответствующему индексу array (и arrays, если указано больше массивов), используемого в качестве аргумента для callback-функции.
Возвращенный массив сохранит ключи аргумента массива тогда и только тогда, когда будет передан ровно один массив. Если передано более одного массива, возвращенный массив будет иметь последовательные целочисленные ключи.
Примеры
Пример #1 Пример использования array_map()
<?php
function cube($n)
{
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
?>
В результате переменная $b будет содержать:
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
Пример #2 Использование array_map() вместе с лямбда-функцией (начиная с PHP 5.3.0)
<?php
$func = function($value) {
return $value * 2;
};
print_r(array_map($func, range(1, 5)));
?>
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
Пример #3 Пример использования array_map(): обработка нескольких массивов
<?php
function show_Spanish($n, $m)
{
return "Число {$n} по-испански - {$m}";
}
function map_Spanish($n, $m)
{
return [$n => $m];
}
$a = [1, 2, 3, 4, 5];
$b = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];
$c = array_map('show_Spanish', $a, $b);
print_r($c);
$d = array_map('map_Spanish', $a , $b);
print_r($d);
?>
Результат выполнения данного примера:
// вывод $c
Array
(
[0] => Число 1 по-испански - uno
[1] => Число 2 по-испански - dos
[2] => Число 3 по-испански - tres
[3] => Число 4 по-испански - cuatro
[4] => Число 5 по-испански - cinco
)
// вывод $d
Array
(
[0] => Array
(
[1] => uno
)
[1] => Array
(
[2] => dos
)
[2] => Array
(
[3] => tres
)
[3] => Array
(
[4] => cuatro
)
[4] => Array
(
[5] => cinco
)
)
Обычно при обработке двух или более массивов, они имеют одинаковую длину, так как callback-функция применяется параллельно к соответствующим элементам массивов. Если массивы имеют различную длину, более короткие из них дополняется элементами с пустыми значениями до длины самого длинного массива.
Интересным эффектом при использовании этой функции является создание
массива массивов, что может быть достигнуто путем использования
значения null в качестве имени callback-функции.
Пример #4 Выполнение zip операции с массивами
<?php
$a = [1, 2, 3, 4, 5];
$b = ['one', 'two', 'three', 'four', 'five'];
$c = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];
$d = array_map(null, $a, $b, $c);
print_r($d);
?>
Результат выполнения данного примера:
Array
(
[0] => Array
(
[0] => 1
[1] => one
[2] => uno
)
[1] => Array
(
[0] => 2
[1] => two
[2] => dos
)
[2] => Array
(
[0] => 3
[1] => three
[2] => tres
)
[3] => Array
(
[0] => 4
[1] => four
[2] => cuatro
)
[4] => Array
(
[0] => 5
[1] => five
[2] => cinco
)
)
Пример #5
null callback только с
array
<?php
$array = [1, 2, 3];
var_dump(array_map(null, $array));
?>
Результат выполнения данного примера:
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Пример #6 Использование array_map() со строковыми ключами
<?php
$arr = ['stringkey' => 'value'];
function cb1($a) {
return [$a];
}
function cb2($a, $b) {
return [$a, $b];
}
var_dump(array_map('cb1', $arr));
var_dump(array_map('cb2', $arr, $arr));
var_dump(array_map(null, $arr));
var_dump(array_map(null, $arr, $arr));
?>
Результат выполнения данного примера:
array(1) {
["stringkey"]=>
array(1) {
[0]=>
string(5) "value"
}
}
array(1) {
[0]=>
array(2) {
[0]=>
string(5) "value"
[1]=>
string(5) "value"
}
}
array(1) {
["stringkey"]=>
string(5) "value"
}
array(1) {
[0]=>
array(2) {
[0]=>
string(5) "value"
[1]=>
string(5) "value"
}
}
Смотрите также
- array_filter() - Фильтрует элементы массива с помощью callback-функции
- array_reduce() - Итеративно уменьшает массив к единственному значению, используя callback-функцию
- array_walk() - Применяет заданную пользователем функцию к каждому элементу массива