array_map

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

array_mapAplica una función a los elementos de un array

Descripción

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

array_map() devuelve un array que contiene los resultados de la aplicación de la función de retrollamada callback a la correspondiente array (y arrays si se proporcionan más arrays) utilizados como argumentos para la función de retrollamada. El número de parámetros que la función de retrollamada callback acepta debería corresponder al número de arrays pasados a array_map(). Los arrays de entrada adicionales son ignorados. Se lanza una ArgumentCountError si se proporciona un número insuficiente de argumentos.

Parámetros

callback

La función de retrollamada de tipo callable a ejecutar para cada elemento de cada array.

null puede ser pasado como valor a callback para ejecutar una operación zip en múltiples arrays y devolver un array cuyos elementos son cada uno un array que contiene los elementos de los arrays de entrada que tienen el mismo índice (ver el ejemplo a continuación). Si solo se proporciona array, array_map() devolverá el array de entrada.

array

Un array a ejecutar a través de la función de retrollamada callback.

arrays

Lista variable de argumentos de arrays adicionales a ejecutar a través de la función de retrollamada callback.

Valores devueltos

Devuelve un array que contiene los resultados de la aplicación de la función de retrollamada callback al valor correspondiente de array (y arrays si se proporcionan más arrays) utilizados como argumentos para la función de retrollamada.

El array devuelto conservará las claves del array pasado como argumento, si y solo si, se pasa un solo array. Si se pasan múltiples arrays como argumento, el array devuelto tendrá claves secuenciales en forma de int.

Historial de cambios

Versión Descripción
8.0.0 Si callback espera que se pase un parámetro por referencia, esta función ahora emitirá un E_WARNING.

Ejemplos

Ejemplo #1 Ejemplo con array_map()

<?php
function cube($n)
{
return (
$n * $n * $n);
}

$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
?>

El contenido de la variable $b será :

Array
(
    [0] => 1
    [1] => 8
    [2] => 27
    [3] => 64
    [4] => 125
)

Ejemplo #2 array_map() utilizando una función cualquiera

<?php

$func
= function(int $value): int {
return
$value * 2;
};

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

// O a partir de 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
)

Ejemplo #3 array_map() : utilización de múltiples arrays

<?php
function show_Spanish(int $n, string $m): string
{
return
"El número {$n} se dice {$m} en Español";
}

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);
?>

El resultado del ejemplo sería:

// Contenido de $c
Array
(
    [0] => El número 1 se dice uno en Español
    [1] => El número 2 se dice dos en Español
    [2] => El número 3 se dice tres en Español
    [3] => El número 4 se dice cuatro en Español
    [4] => El número 5 se dice cinco en Español
)

// Contenido de $d
Array
(
    [0] => Array
        (
            [1] => uno
        )

    [1] => Array
        (
            [2] => dos
        )

    [2] => Array
        (
            [3] => tres
        )

    [3] => Array
        (
            [4] => cuatro
        )

    [4] => Array
        (
            [5] => cinco
        )

)

Generalmente, al utilizar múltiples arrays, deben ser de igual longitud, ya que la función de retrollamada se aplica de manera similar a todos los arrays. Si los arrays son de tamaños desiguales, los más pequeños se completarán con elementos vacíos para alcanzar el tamaño del más grande.

Un uso interesante de esta función es la construcción de arrays de arrays, fácilmente realizada pasando el valor null como nombre de función de retrollamada.

Ejemplo #4 Ejecución de una operación zip de arrays

<?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);
?>

El resultado del ejemplo sería:

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
        )

)

Ejemplo #5 null callback con solo array

<?php
$array
= [1, 2, 3];
var_dump(array_map(null, $array));
?>

El resultado del ejemplo sería:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

Ejemplo #6 array_map() - con claves en forma de string

<?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));
?>

El resultado del ejemplo sería:

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"
  }
}

Ejemplo #7 array_map() - arrays asociativos

Aunque array_map() no soporta directamente el uso de las claves de un array como entrada, esto puede ser simulado utilizando array_keys().

<?php
$arr
= [
'v1' => 'First release',
'v2' => 'Second release',
'v3' => 'Third release',
];
// Nota: Anterior a 7.4.0, se debe utilizar la sintaxis más larga para las
// funciones anónimas en su lugar.
$callback = fn(string $k, string $v): string => "$k was the $v";
$result = array_map($callback, array_keys($arr), array_values($arr));
var_dump($result);
?>

El resultado del ejemplo sería:

array(3) {
  [0]=>
  string(24) "v1 was the First release"
  [1]=>
  string(25) "v2 was the Second release"
  [2]=>
  string(24) "v3 was the Third release"
}

Ver también

  • array_filter() - Filtra los elementos de un array mediante una función de retrollamada
  • array_reduce() - Reduce itérativemente un array
  • array_walk() - Ejecuta una función proporcionada por el usuario en cada uno de los elementos de un array