There are several ways to provide this functionality for versions prior to PHP 7.3.0. It is possible to use
array_keys()
, but that may be rather inefficient. It is also possible to use
reset()
and
key()
, but that may change the internal array pointer. An efficient solution, which does not change the internal array pointer, written as polyfill:
array_map()
returns an
array
containing the results of applying the
callback
to the corresponding value of
array
(and
arrays
if more arrays are provided) used as arguments for the callback. The number of parameters that the
callback
function accepts should match the number of arrays passed to
array_map()
. Excess input arrays are ignored. An
ArgumentCountError
is thrown if an insufficient number of arguments is provided.
Parameters
callback
A
callable
to run for each element in each array.
null
can be passed as a value to
callback
to perform a zip operation on multiple arrays. If only
array
is provided,
array_map()
will return the input array.
array
An array to run through the
callback
function.
arrays
Supplementary variable list of array arguments to run through the
callback
function.
Return Values
Returns an array containing the results of applying the
callback
function to the corresponding value of
array
(and
arrays
if more arrays are provided) used as arguments for the callback.
The returned array will preserve the keys of the array argument if and only if exactly one array is passed. If more than one array is passed, the returned array will have sequential integer keys.
Changelog
Version
Description
8.0.0
If
callback
expects a parameter to be passed by reference, this function will now emit an
E_WARNING
.
<?php$func=function(int$value):int{return$value*2;};print_r(array_map($func,range(1,5)));// Or as of PHP 7.4.0:print_r(array_map(fn($value):int=>$value*2,range(1,5)));?>
<?phpfunctionshow_Spanish(int$n,string$m):string{return"The number {$n} is called {$m} in Spanish";}functionmap_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);?>
The above example will output:
// printout of $c
Array
(
[0] => The number 1 is called uno in Spanish
[1] => The number 2 is called dos in Spanish
[2] => The number 3 is called tres in Spanish
[3] => The number 4 is called cuatro in Spanish
[4] => The number 5 is called cinco in Spanish
)
// printout of $d
Array
(
[0] => Array
(
[1] => uno
)
[1] => Array
(
[2] => dos
)
[2] => Array
(
[3] => tres
)
[3] => Array
(
[4] => cuatro
)
[4] => Array
(
[5] => cinco
)
)
Usually when using two or more arrays, they should be of equal length because the callback function is applied in parallel to the corresponding elements. If the arrays are of unequal length, shorter ones will be extended with empty elements to match the length of the longest.
An interesting use of this function is to construct an array of arrays, which can be easily performed by using
null
as the name of the callback function
While
array_map()
does not directly support using the array key as an input, that may be simulated using
array_keys()
.
<?php$arr=['v1'=>'First release','v2'=>'Second release','v3'=>'Third release',];// Note: Before 7.4.0, use the longer syntax for anonymous functions instead.$callback=fn(string$k,string$v):string=>"$k was the $v";$result=array_map($callback,array_keys($arr),array_values($arr));var_dump($result);?>
The above example will output:
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"
}
See Also
array_filter() - Filters elements of an array using a callback function
array_reduce() - Iteratively reduce the array to a single value using a callback function
array_walk() - Apply a user supplied function to every member of an array
Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array.
If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will
not
overwrite the original value, but will be appended.
Values in the input arrays with numeric keys will be renumbered with incrementing keys starting from zero in the result array.
Parameters
arrays
Variable list of arrays to merge.
Return Values
Returns the resulting array. If called without any arguments, returns an empty
array
.
Changelog
Version
Description
7.4.0
This function can now be called without any parameter. Formerly, at least one parameter has been required.
Don't forget that numeric keys will be renumbered!
Array
(
[0] => data
)
If you want to append array elements from the second array to the first array while not overwriting the elements from the first array and not re-indexing, use the
+
array union operator:
The keys from the first array will be preserved. If an array key exists in both arrays, then the element from the first array will be used and the matching key's element from the second array will be ignored.
array_merge_recursive
—
Merge one or more arrays recursively
Description
array_merge_recursive(array...$arrays):array
array_merge_recursive()
merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array.
If the input arrays have the same string keys, then the values for these keys are merged together into an array, and this is done recursively, so that if one of the values is an array itself, the function will merge it with a corresponding entry in another array too. If, however, the arrays have the same numeric key, the later value will not overwrite the original value, but will be appended.
Parameters
arrays
Variable list of arrays to recursively merge.
Return Values
An array of values resulted from merging the arguments together. If called without any arguments, returns an empty
array
.
Changelog
Version
Description
7.4.0
This function can now be called without any parameter. Formerly, at least one parameter has been required.