函数式编程

程序员做久了一定会听说函数式编程一词,听起来很玄乎.

网上很多文章都在写函数式编程如何如何好,我认为只有能解决问题,用任何编程方式都是好的,没有必要对函数式编程太过崇拜.

不过,别人写的函数式编程我们最起码要能看懂是吧,下面来看一下PHP中什么地方用到了函数式编程的思想.

array_map函数

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_walk与array_map用法基本相同,目的上略有区别.
array_map目的是获取处理后的结果,而不改变原数组.
array_walk目的是对原数组进行处理,没有返回值.

array_filter函数

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接收两个参数,第一个参数是上次运行的结果.比如说我们可以用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;
        });
posted @ 2018-06-09 09:15:03
评论加载中...

发表评论