零落成泥碾作尘,只有香如故。
array_map
返回用户自定义函数作用后的数组
向array_map传入数组,出来的还是数组,而不是上面array_reduce()的一个值。所以,array_map()最简单的就是把 callback函数作用到每个数组的值上,最常见的场景就是 intval()、trim() 数组中的值,在一些框架的源码中也经常见到,比如:
1 2 3
| $arr = array('2','3','4','5'); array_map('intval' , $arr); array_map('htmlspecialchars' , $arr);
|
array_reduce
使用回调函数迭代地将数组简化为单一的值
使用array_reduce()替代foreach()循环最常用的一个业务场景也许就是数组求和,比如:
使用foreach
1 2 3
| $arr = ['2','3','4','5']; array_map('intval' , $arr); array_map('htmlspecialchars' , $arr);
|
使用array_reduce
1 2 3 4 5 6
| $nums = [1, 2, 3, 4, 6]; $sum = array_reduce($nums, function ($res, $num) { return $res + $num; });
dd($sum);
|
array_reduce带初始值
1 2 3 4 5 6
| $arr = ['AAAA', 'BBBB', 'CCCC']; $res = array_reduce($arr, function($carry, $item){ return $carry . $item; }, '所有字符:'); dd($res);
|
扩展array_filter
该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function odd($var) { return ($var % 2 == 1); }
function even($var) { return ($var % 2 == 0); }
$array1 = ["a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5]; $array2 = [6, 7, 8, 9, 10, 11, 12];
echo "Odd : "; dump(array_filter($array1, "odd")); echo "Even: "; dump(array_filter($array2, "even"));
|
https://blog.tanteng.me/2015/07/array-map-reduce-foreach/