关于PHP数组操作函数更为细致的用法大家还可以参考PHP在线参考手册:http://php.net/manual/zh/index.php

array_reduce — 用回调函数迭代地将数组简化为单一的值

给定一个数组:

$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更优雅,更少的定义变量。推荐使用。

很明显,上一篇文章(PHP数组处理函数的使用array_push(一))我们就可以这样实现:

 $ids = array_reduce($user, function($v,$w){
$v[$w["id"]]=$w["name"];
return $v;
});

实现效果:

最新文章

  1. K-近邻算法(KNN)
  2. 【转】解决eclipse新导入工程无法run as server
  3. 请使用java来构造和遍历二叉树?
  4. JQuery方法扩展
  5. AOSP
  6. 属性动画(Property Animation)资源
  7. servlet就实现在线用户表
  8. find命令--xargs--exec
  9. spring mvc3 静态文件放在WEB-INF下无法访问解决和解决@Controller失效问题
  10. Linux C++ TCP Socket通信实例
  11. jzoj4235 序列
  12. QT 手式编译步骤
  13. Red Pen - 快速高效的获取设计项目的反馈
  14. 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
  15. 互联网创业原则与创业模式attilax大总结
  16. [转]JVM运行时内存结构
  17. Struts2+Spring3+MyBatis3整合以及Spring注解开发
  18. mysql union和union all 的差别以及使用
  19. ORA-01940:无法删除当前已链接的用户
  20. iOS View生成--->清晰的图片

热门文章

  1. Java多线程与并发库高级应用-传统线程机制回顾
  2. 【bzoj1951】 Sdoi2010—古代猪文
  3. Hash_集合
  4. ng-if else的使用
  5. UOJ244 【UER #7】短路
  6. css选择器([class*=" icon-"], [class^=icon-] 的区别)
  7. Android程序设计-RecyclerView的使用
  8. POJ 1273 Drainage Ditches
  9. ConurrentHashMap和Hashtable的区别
  10. POJ 2942Knights of the Round Table(二分图判定+双连通分量)