(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_map — Aplica la retrollamada a los elementos de los arrays dados
array_map() devuelve un array que contiene todos los
elementos de array1
después de haber aplicado la
función callback
a cada uno de ellos.
El número de parámetros que la función
callback
acepta debería coincidir con el número de arrays
proporcionados a array_map().
callback
Función de retrollamada a ejecutar para cada elemento de cada array.
array1
Un array a recorrer con la función callback
.
...
Lista variable de argumentos de tipo array a recorrer con la
función callback
.
Devuelve un array que contiene todos los elementos de array1
después de aplicar la función callback
a cada uno de ellos.
Ejemplo #1 Ejemplo de array_map()
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
Este ejemplo hace que $b contenga:
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
Ejemplo #2 array_map() usando una función lambda (desde PHP 5.3.0)
<?php
$func = function($valor) {
return $valor * 2;
};
print_r(array_map($func, range(1, 5)));
?>
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
Ejemplo #3 array_map() - usando más arrays
<?php
function mostrar_en_español($n, $m)
{
return("El número $n se llama $m en español");
}
function correspondencia_en_español($n, $m)
{
return(array($n => $m));
}
$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");
$c = array_map("mostrar_en_español", $a, $b);
print_r($c);
$d = array_map("correspondencia_en_español", $a , $b);
print_r($d);
?>
El resultado del ejemplo sería:
// salida de $c Array ( [0] => El número 1 se llama uno en español [1] => El número 2 se llama dos en español [2] => El número 3 se llama tres en español [3] => El número 4 se llama cuatro en español [4] => El número 5 se llama cinco en español ) // salida of $d Array ( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ) )
Usualmente, cuando se usan dos o más arrays, estos deberían ser de la misma longitud, ya que la retrollamada se aplica en paralelo a los elementos correspondientes. Si los arrays son de longitudes diferentes, los más cortos se extenderán con elementos vacíos para que coincidan con la logintud del más largo.
Un uso interesante de esta función es la construcción de un array de
arrays, lo que se puede llevar a cabo usando NULL
como el nombre de la
retrollamada.
Ejemplo #4 Crear un array de arrays
<?php
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("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 ) )
El array devuelto conservará las claves del argumento array si y solo si se pasa exactamente un array. Si se pasa más de un array, el array devuelto tendrá claves secuenciales de tipo integer.
Ejemplo #5 array_map() - con claves de tipo string
<?php
$arr = array("stringkey" => "value");
function cb1($a) {
return array ($a);
}
function cb2($a, $b) {
return array ($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" } }