缘由:当开发中需要两层foreach甚至多层(不建议出现多层情况)时候,为了提高代码的可读性,可以使用适当的array相关函数来处理这些问题。
array_map
定义:为数组的每个元素应用回调函数,可以理解为,将数组中的每个元素作为形参,依次运行回调函数,将所处理的值以数组的形式返回。
例子:
$array = array(
1,2,3,4,5
);
$array2 = array(
1,2,3,4
);
$result = array_map(function ($a, $b){
return $a * $b;
}, $array, $array2);
print_r($result);
打印结果:
array(1,4, 9, 16, 0);
为什么最后是0?
因为,遍历两个数组的时候,数量不匹配时候,较小的数组缺失元素将被认为是null。
array_filter:
定义:用回调函数过滤数组中的每个元素,等同于array_map的效果,但是更多时候用于对数组的值进行过滤。返回值的数组中将会对原有的键值和键名进行保留。
例子:
$array = array(
1,2,3,4,5
);
$result = array_filter($array, function($value) {
if ($value > 3) {
return true;
}
return false;
});
print_r($result);
结果
Array
(
[3] => 4
[4] => 5
)
tip:可以根据ARRAY_FILTER_USE_KEY或者ARRAY_FILTER_USE_BOTH来决定用什么来作为回调函数的参数。
array_reduce:
定义:用回调函数迭代地将数组简化为单一的值,其实可以理解为将不同数组中有关联的数据整合起来。
例子:
$array = array(
1,2,3,4,5
);
$result = [];
$result = array_reduce($array, function($one, $value){
$one[] = $value*3;
return $one;
});
print_r($result);
结果:
Array
(
[0] => 3
[1] => 6
[2] => 9
[3] => 12
[4] => 15
)
每次$one都会做为下一次的参数继续使用(可以理解为地址引用)。
这三个函数在不同的场景发挥不同的作用,还有是否对数组进行改变等。