程序员做久了一定会听说函数式编程一词,听起来很玄乎.
网上很多文章都在写函数式编程如何如何好,我认为只有能解决问题,用任何编程方式都是好的,没有必要对函数式编程太过崇拜.
不过,别人写的函数式编程我们最起码要能看懂是吧,下面来看一下PHP中什么地方用到了函数式编程的思想.
array_map函数会遍历数组,然后对每一个元素执行一个函数,最后将执行结果组成一个新数组返回.
function isDog($v)
{
if ($v==="Dog")
{
return True;
}
return False;
}
$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a)); //[False,True,False]
array_map还有多数组的形式
function same($v1,$v2)
{
if ($v1===$v2)
{
return "same";
}
return "different";
}
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("same",$a1,$a2)); //["different","same","different"]
array_walk与array_map用法基本相同,目的上略有区别.
array_map目的是获取处理后的结果,而不改变原数组.
array_walk目的是对原数组进行处理,没有返回值.
array_filter函数可以对数组中的元素逐个进行过滤,比如说想得到type为2的元素,可以这样写:
$arr = [
['id' => 1, 'type' => 1],
['id' => 2, 'type' => 1],
['id' => 3, 'type' => 2],
['id' => 4, 'type' => 2],
['id' => 5, 'type' => 2],
];
array_filter($arr, function ($item) {
return $item['type'] == 2;
});
array_reduce函数也会遍历数组,对每个元素执行一个函数,不同的是array_reduce接收两个参数,第一个参数是上次运行的结果.比如说我们可以用array_reduce来求和
$arr = [1,2,3,4,5,1];
array_reduce($arr, function ($c,$item) {
return $c+$item;
},0);
或者找最小值
$arr = [1, 2, 3, 4, 5, 1];
array_reduce($arr, function ($c, $item) {
return $c < $item ? $c : $item;
});