💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
给定一个数组: $ar = array(1,2,3,4,5); 如果要求得这个数组中各个元素之和。 方法一、 很自然的用foreach实现 ``` $sum = 0; foreach ($ar as $v) { $sum+=$v; } echo $sum; ``` 方法二、 我们可以用array_reduce实现。它是专门用来迭代数组的。该函数最多接收三个参数。 第一个参数接收数组 第二个参数函数名,也可以是匿名函数,函数有两个参数,分别代表`$result`和`$item` 第三个参数(可选),该参数将被当成是数组中的第一个值来处理,或者如果数组为空的话就作为最终返回值。 ``` function leijia($a,$b){ $a+=$b; return $a; } $result = array_reduce($ar ,leijia); echo $result; ``` 继续优化,在`PHP5.3`以上中可以用匿名函数了。使代码更精简。 ``` $result = array_reduce($ar ,function($a,$b){ $a+=$b; return $a; }); ``` array_reduce的强大不仅如此。看下面的例子。将数组$arr的首个元素弹出,作为初始值,避免`min($result['min'], $item['min'])`中`$result`为空。 否则最终结果min是空的。 ``` $arr = array( array('min' => 1.5456, 'max' => 2.28548, 'volume' => 23.152), array('min' => 1.5457, 'max' => 2.28549, 'volume' => 23.152), array('min' => 1.5458, 'max' => 2.28550, 'volume' => 23.152), array('min' => 1.5459, 'max' => 2.28551, 'volume' => 23.152), array('min' => 1.5460, 'max' => 2.28552, 'volume' => 23.152), ); $initial = array_shift($arr); $t = array_reduce($arr, function($result, $item) { $result['min'] = min($result['min'], $item['min']); $result['max'] = max($result['max'], $item['max']); $result['volume'] += $item['volume']; return $result; }, $initial); ``` 总之,这种写法比foreach更优雅,更少的定义变量。推荐使用。