array_map

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

array_mapApplica la funzione callback a tutti gli elementi degli array dati

Descrizione

array_map(callable $callback, array $array1, array $... = ?): array

array_map() restituisce un array contenente i risultati dell'applicazione della callback all'indice corrispondente di array1 (e ... se vengono forniti più array) usati come argomenti per la callback. Il numero di parametri che la funzione callback accetta dovrebbe corrispondere al numero di array passati ad array_map().

Elenco dei parametri

callback

Una callable da eseguire per ogni elemento in ogni array.

null può essere passato come valore alla callback per eseguire un'operazione zip su più array. Se viene fornito solo array1, array_map() restituirà l'array di input.

array1

Un array su cui eseguire la funzione callback.

...

Lista di variabili supplementari di argomenti di array da eseguire nella funzione callback.

Valori restituiti

Restituisce un array contenente i risultati dell'applicazione della funzione callback all'indice corrispondente di array1 (e ... se vengono forniti più array) usati come argomenti per la callback.

L'array restituito conserverà le chiavi del parametro array se e solo se viene passato esattamente un array. Se viene passato più di un array, l'array restituito avrà chiavi intere sequenziali.

Esempi

Example #1 Esempio di array_map()

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

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

Questo fa sì che $b abbia:

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

Example #2 array_map() usando una funzione lambda (a partire da 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
)

Example #3 array_map() - usando più array

<?php
function show_Spanish($n, $m)
{
return
"Il numero {$n} è chiamato {$m} in spagnolo";
}

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

Il precedente esempio visualizzerà:

// stampa di $c
Array
(
    [0] => Il numero 1 è chiamato uno in spagnolo
    [1] => Il numero 2 è chiamato dos in spagnolo
    [2] => Il numero 3 è chiamato tres in spagnolo
    [3] => Il numero 4 è chiamato cuatro in spagnolo
    [4] => Il numero 5 è chiamato cinco in spagnolo
)

// stampa di $d
Array
(
    [0] => Array
        (
            [1] => uno
        )

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

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

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

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

)

Di solito quando si usano due o più array, questi dovrebbero essere di uguale lunghezza in quanto la funzione di callback viene applicata in parallelo agli elementi corrispondenti. Se gli array sono di lunghezza diversa, quelli più corti verranno estesi con elementi vuoti per uguagliare la lunghezza del più lungo.

Un uso interessante di questa funzione è quello di costruire un array di array, cosa che può essere facilmente ottenuta usando null come nome della funzione callback

Example #4 Esecuzione di un'operazione zip di array

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

Il precedente esempio visualizzerà:

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
        )

)

Example #5 callback null con solo array1

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

Il precedente esempio visualizzerà:

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

Example #6 array_map() - con chiavi stringa

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

Il precedente esempio visualizzerà:

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

Vedere anche:

  • array_filter() - Filtra gli elementi di un array usando una funzione callback
  • array_reduce() - Riduce iterativamente l'array a un singolo valore utilizzando una funzione callback
  • array_walk() - Esegue una funzione su ogni elemento dell'array