(PHP 4 >= 4.0.6, PHP 5, PHP 7)
array_map — Wendet eine Callback-Funktion auf die Elemente von Arrays an
array_map() gibt ein array zurück, das die Ergebnisse der
Anwendung des callback
auf den entsprechenden Index von
array1
(und ...
, wenn weitere Arrays angegeben wurden)
als Callback-Argumente enthält.
Die Anzahl Parameter, welche die Callback-Funktion
callback
akzeptiert, sollte der Anzahl der an
array_map() übergebenen Arrays entsprechen.
Das zurückgelieferte Array erhält die Schlüssel des Array-Arguments nur, wenn genau ein Array übergeben wurde. Wird mehr als ein Array übergeben, hat das zurückgelieferte Array sequentielle Integer-Schlüssel.
callback
Ein callable, das für jedes Element in jedem Array aufgerufen werden soll.
NULL
kann als Wert an callback
übergeben werden,
um eine zip-Operation auf mehrere Arrays durchzuführen.
Wird nur array1
übergeben,
gibt array_map() das Eingabe-Array zurück.
array1
Ein Array, auf das die callback
-Funktion
angewendet werden soll.
...
Zusätzliche variable Liste von Array-Argumenten, auf die die
callback
-Funktion angewendet werden soll.
array_map() gibt ein Array zurück, das die Ergebnisse der
Anwendung der callback
Funktion auf den entsprechenden Index von
array1
(und ...
, wenn weitere Arrays angegeben wurden)
als Callback-Argumente enthält.
Beispiel #1 array_map()-Beispiel
<?php
function cube($n)
{
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
?>
Dies speichert in $b:
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
Beispiel #2 array_map() mit einer Lambda-Funktion (seit PHP 5.3.0)
<?php
/* Seit PHP 5.3.0 */
$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 )
Beispiel #3 array_map() - Verwendung mehrerer Arrays
<?php
function show_Spanish($n, $m)
{
return "Die Zahl {$n} heißt auf Spanisch {$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);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
// Ausgabe von $c Array ( [0] => Die Zahl 1 heißt auf Spanisch uno [1] => Die Zahl 2 heißt auf Spanisch dos [2] => Die Zahl 3 heißt auf Spanisch tres [3] => Die Zahl 4 heißt auf Spanisch cuatro [4] => Die Zahl 5 heißt auf Spanisch cinco ) // Ausgabe von $d Array ( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ) )
Bei Verwendung von zwei oder mehr Arrays sollten diese gewöhnlich die gleiche Länge besitzen, da die Callback-Funktion parallel auf die entsprechenden Elemente angewandt wird. Haben die Arrays unterschiedliche Längen, werden kürzere um leere Elemente erweitert, um mit der Länge des längsten übereinzustimmen.
Eine interessante Anwendung dieser Funktion ist die Konstruktion
eines Arrays bestehend aus Arrays, was mit NULL
als Name der
Callback-Funktion leicht realisiert werden kann.
Beispiel #4 Durchführen einer zip-Operation von Arrays
<?php
$a = [1, 2, 3, 4, 5];
$b = ['eins', 'zwei', 'drei', 'vier', 'fünf'];
$c = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];
$d = array_map(null, $a, $b, $c);
print_r($d);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Array ( [0] => Array ( [0] => 1 [1] => eins [2] => uno ) [1] => Array ( [0] => 2 [1] => zwei [2] => dos ) [2] => Array ( [0] => 3 [1] => drei [2] => tres ) [3] => Array ( [0] => 4 [1] => vier [2] => cuatro ) [4] => Array ( [0] => 5 [1] => fünf [2] => cinco ) )
Beispiel #5
NULL
callback
nur mit array1
<?php
$array = [1, 2, 3];
var_dump(array_map(null, $array));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
Beispiel #6 array_map() - mit String-Schlüsseln
<?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));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
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" } }