array_map
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
array_map — Wendet eine Callback-Funktion auf die Elemente von Arrays an
Beschreibung
array_map() gibt ein Array zurück, das die Ergebnisse
der Anwendung der Callback-Funktion callback
auf den
entsprechenden Wert von array
(und
arrays
, wenn weitere Arrays angegeben wurden) als
Callback-Argumente enthält. Die Anzahl Parameter, welche
callback
akzeptiert, sollte der Anzahl der an
array_map() übergebenen Arrays entsprechen. Überzählige
Eingabe-Arrays werden ignoriert. Wenn eine zu geringe Anzahl von Argumenten
übergeben wird, wird ein ArgumentCountError-Fehler
ausgelöst.
Parameter-Liste
-
callback
-
Ein callable, das für jedes Element in jedem Array aufgerufen werden soll.
null
kann als Wert ancallback
übergeben werden, um eine zip-Operation auf mehrere Arrays durchzuführen. Wird nurarray
übergeben, gibt array_map() das Eingabe-Array zurück. -
array
-
Ein Array, auf das die
callback
-Funktion angewendet werden soll. -
arrays
-
Zusätzliche variable Liste von Array-Argumenten, auf die die
callback
-Funktion angewendet werden soll.
Rückgabewerte
array_map() gibt ein Array zurück, das die Ergebnisse
der Anwendung der callback
-Funktion auf den
entsprechenden Wert von array
(und
arrays
, wenn weitere Arrays angegeben wurden) als
Callback-Argumente enthält.
Das zurückgegebene Array behält die Schlüssel des Array-Arguments nur bei, wenn genau ein Array übergeben wurde. Wird mehr als ein Array übergeben, hat das zurückgegebene Array aufeinanderfolgende Integer-Schlüssel.
Changelog
Version | Beschreibung |
---|---|
8.0.0 |
Wenn callback einen per Referenz übergebenen
Parameter erwartet, gibt diese Funktion nun einen Fehler der Stufe
E_WARNING aus.
|
Beispiele
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
<?php
$func = function(int $value): int {
return $value * 2;
};
print_r(array_map($func, range(1, 5)));
// Oder ab 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 )
Beispiel #3 array_map() - Verwendung mehrerer Arrays
<?php
function show_Spanish(int $n, string $m): string
{
return "Die Zahl {$n} heißt auf Spanisch {$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);
?>
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 die gleiche Länge besitzen, da die Callback-Funktion parallel auf die entsprechenden Elemente angewandt wird. Haben die Arrays unterschiedliche Längen, werden die kürzeren 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
mit nur einem array
<?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" } }
Beispiel #7 array_map() - assoziative Arrays
Die array_map() unterstützt die Verwendung des Array-Schlüssels als Eingabe zwar nicht direkt, aber dies kann mit array_keys() simuliert werden.
<?php
$arr = [
'v1' => 'erste Version',
'v2' => 'zweite Version',
'v3' => 'dritte Version',
];
// Hinweis: Vor 7.4.0 ist stattdessen die längere Syntax für anonyme
// Funktionen zu verwenden.
$callback = fn(string $k, string $v): string => "$k war die $v";
$result = array_map($callback, array_keys($arr), array_values($arr));
var_dump($result);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(3) { [0]=> string(24) "v1 war die erste Version" [1]=> string(25) "v2 war die zweite Version" [2]=> string(25) "v3 war die dritte Version" }
Siehe auch
- array_filter() - Filtert Elemente eines Arrays mittels einer Callback-Funktion
- array_reduce() - Reduziert das Array mittels einer Callback-Funktion iterativ auf einen einzigen Wert
- array_walk() - Wendet eine vom Benutzer gelieferte Funktion auf jedes Element eines Arrays an