【原创】深入理解 array_reduce() 执行原理

blogdaren 2018-04-09 抢沙发 352人次

研究背景

首先移步至文中DEMO代码,如果符合你预期运行结果,请忽略。本人的解读未必正确,欢迎学习指正。

array_reduce

(PHP 4 >= 4.0.5, PHP 5,PHP7)

array_reduce -- 用回调函数迭代地将数组简化为单一的值【常配合闭包一起使用】

函数说明

mixed array_reduce ( array input, callback function [, int initial] )

array_reduce() 将回调函数 function 迭代地作用到 input 数组中的每一个单元中,从而将数组简化为单一的值。

如果指定了可选参数 initial,该参数将被当成是数组中的第一个值来处理,或者如果数组为空的话就作为最终返回值。

如果数组为空并且没有传递 initial 参数,array_reduce() 返回 NULL

DEMO:

<?php
$input = [1,2,3,4,8];

$result = array_reduce($input, function($a, $b){
        //return $b * 3;        //output: 24
        //return $a + $b;       //output: 18
        //return $a * 2;        //output: 0
});

print_r($result . PHP_EOL);

原理解读:

1.  关于函数参数: 

   【array input】待处理数组

   【callback function】回调函数

   【int initial】 其为回调函数的第一个参数的取值,即DEMO中默认 $a = 0,若设置,则 $a = $initial

2. 关于代码片段:

   【第5行】遍历数组,因为默认没有设置initial,所以$a = 0,$b = 1,然后进行 $b * 3 = 1 * 3 = 3, 之后将数组中的下一个元素顺次赋值给 $b进行运算,......,如此迭代,直至最后一次$b * 3 = 8 * 3 = 24,所以最终返回 24

   【第6行】遍历数组,因为默认没有设置initial,所以$a = 0,$b = 1,然后进行$a + $b = 0 + 1 = 1,之后将数组中的下一个元素顺次赋值给 $b进行运算,......,如此迭代,诡异的是这里 return $a + $b 等价于 return $a += $b,换句话,$a 携带了上次迭代的值,所以最终返回18

   【第7行】遍历数组,因为默认没有设置initial,所以$a = 0,然后进行 $a * 2 = 0 * 2 = 0, 之后每次进行 $a * 2 = 0 * 2 = 0,......,如此迭代,直至最后一次$a * 2 = 0 * 2 = 0,所以最终返回 0


版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】深入理解 array_reduce() 执行原理

发表评论:

您的昵称:
电子邮件:
个人主页: