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
PHP / array_merge — DevDocs
array_merge
(PHP 4, PHP 5, PHP 7, PHP 8)
array_merge
—
Merge one or more arrays
Description
array_merge(array...$arrays):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.
SORT_LOCALE_STRING
- compare items as strings, based on the current locale. It uses the locale, which can be changed using
setlocale()
SORT_NATURAL
- compare items as strings using "natural ordering" like
natsort()
SORT_FLAG_CASE
- can be combined (bitwise OR) with
SORT_STRING
or
SORT_NATURAL
to sort strings case-insensitively
This argument can be swapped with
array1_sort_order
or omitted entirely, in which case
SORT_REGULAR
is assumed.
rest
More arrays, optionally followed by sort order and flags. Only elements corresponding to equivalent elements in previous arrays are compared. In other words, the sort is lexicographical.
In this example, after sorting, the first array will contain 0, 10, 100, 100. The second array will contain 4, 1, 2, 3. The entries in the second array corresponding to the identical entries in the first array (100 and 100) were sorted as well.
In this example, after sorting, the first array will transform to "10", 100, 100, 11, "a" (it was sorted as strings in ascending order). The second will contain 1, 3, "2", 2, 1 (sorted as numbers, in descending order).
In this example, we will order by
volume
descending,
edition
ascending.
We have an array of rows, but
array_multisort()
requires an array of columns, so we use the below code to obtain the columns, then perform the sorting.
<?php// Obtain a list of columnsforeach($dataas$key=>$row){$volume[$key]=$row['volume'];$edition[$key]=$row['edition'];}// you can use array_column() instead of the above code$volume=array_column($data,'volume');$edition=array_column($data,'edition');// Sort the data with volume descending, edition ascending// Add $data as the last parameter, to sort by the common keyarray_multisort($volume,SORT_DESC,$edition,SORT_ASC,$data);?>
The dataset is now sorted, and will look like this:
Both
SORT_STRING
and
SORT_REGULAR
are case sensitive, strings starting with a capital letter will come before strings starting with a lowercase letter.
To perform a case insensitive sort, force the sorting order to be determined by a lowercase copy of the original array.
array_pad()
returns a copy of the
array
padded to size specified by
length
with value
value
. If
length
is positive then the array is padded on the right, if it's negative then on the left. If the absolute value of
length
is less than or equal to the length of the
array
then no padding takes place. It is possible to add at most 1048576 elements at a time.
Parameters
array
Initial array of values to pad.
length
New size of the array.
value
Value to pad if
array
is less than
length
.
Return Values
Returns a copy of the
array
padded to size specified by
length
with value
value
. If
length
is positive then the array is padded on the right, if it's negative then on the left. If the absolute value of
length
is less than or equal to the length of the
array
then no padding takes place.
Examples
Example #1
array_pad()
example
<?php$input=array(12,10,9);$result=array_pad($input,5,0);// result is array(12, 10, 9, 0, 0)$result=array_pad($input,-7,-1);// result is array(-1, -1, -1, -1, 12, 10, 9)$result=array_pad($input,2,"noop");// not padded?>
See Also
array_fill() - Fill an array with values
range() - Create an array containing a range of elements