array_map

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

array_mapПрименяет callback-функцию ко всем элементам указанных массивов

Описание

array_map(?callable$callback, array$array, array...$arrays): array

Функция array_map() возвращает массив (array), содержащий результаты применения callback-функции к соответствующему элементу arrayarrays, если указано больше массивов), используемого в качестве аргумента callback-функции. Количество параметров, передаваемых callback-функции, должно совпадать с количеством массивов, переданным функции array_map(). Лишние входные массивы игнорируются. Если предоставлено недостаточное количество аргументов, выбрасывается ArgumentCountError.

Список параметров

callback

callable, применяемая к каждому элементу в каждом массиве.

null может быть передан в качестве значения callback для выполнения zip операции с несколькими массивами. Если указан только array, array_map() вернёт входной массив.

array

Массив, к которому применяется callback-функция.

arrays

Дополнительные массивы для обработки callback-функцией.

Возвращаемые значения

Возвращает массив, содержащий результаты применения callback-функции к соответствующему элементу arrayarrays, если указано больше массивов), используемого в качестве аргумента для callback-функции.

Возвращённый массив сохранит ключи аргумента массива тогда и только тогда, когда будет передан ровно один массив. Если передано более одного массива, возвращённый массив будет иметь последовательные целочисленные ключи.

Список изменений

ВерсияОписание
8.0.0 Теперь функция выдаст ошибку уровня E_WARNING, если параметр callback-функции, переданной в параметр 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
$func
= function(int $value): int {
return
$value * 2;
};

print_r(array_map($func, range(1, 5)));

// Или с PHP 7.4.0:

print_r(array_map(fn($value): int => $value * 2, range(1, 5)));

?>
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )

Пример #3 Пример использования array_map(): обработка нескольких массивов

<?php
function show_Spanish(int $n, string $m): string
{
return
"Число {$n} по-испански - {$m}";
}

function
map_Spanish(int $n, string $m): array
{
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 )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 nullcallback только с 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" } }

Пример #7 array_map() - ассоциативные массивы

Хотя array_map() напрямую не поддерживает использование ключа массива в качестве входных данных, это можно смоделировать с помощью array_keys().

<?php
$arr
= [
'v1' => 'Первый выпуск',
'v2' => 'Второй выпуск',
'v3' => 'Третий выпуск',
];

// Примечание: До версии 7.4.0 вместо этого используйте более длинный синтаксис для анонимных функций.
$callback = fn(string $k, string $v): string => "$k - это $v";

$result = array_map($callback, array_keys($arr), array_values($arr));

var_dump($result);
?>

Результат выполнения приведённого примера:

array(3) { [0]=> string(24) "v1 - это Первый выпуск" [1]=> string(25) "v2 - это Второй выпуск" [2]=> string(24) "v3 - это Третий выпуск" }

Смотрите также

  • array_filter() - Фильтрует элементы массива с помощью callback-функции
  • array_reduce() - Итеративно уменьшает массив к единственному значению, используя callback-функцию
  • array_walk() - Применяет заданную пользователем функцию к каждому элементу массива
To Top