PHP数组处理函数的使用array_reduce(二)
关于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;
});
实现效果:
PHP数组处理函数的使用array_reduce(二)的更多相关文章
- C语言数组和函数实例练习(二)
1.C语言中不允许函数的嵌套定义,但可以使用函数的嵌套调用. 例1:输入4个整数,找出其中最大的数. #include <stdio.h> #include <stdlib.h> ...
- [C++程序设计]用数组名作函数参数
1. 用数组元素作函数实参 #include <iostream> using namespace std; int max_value(int x, int max) { return ...
- 【426】C 传递数组给函数
参考:C 传递数组给函数 参考:C语言二维数组作为函数参数传递 参考:二维数组作为函数参数传递剖析(C语言)(6.19更新第5种) 总结: 一维数组参数,可以是地址.arr[].arr[n] 二维数组 ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- PHP中的数组(二)常用数组处理函数
数组的相关处理函数 一.数组键/值操作有关的函数 1.array_values() 无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...
- C语言二维数组作为函数的参数
前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
- C语言学习笔记 (005) - 二维数组作为函数参数传递剖析
前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...} / ...
随机推荐
- 【HDU 4311】Meeting point-1(前缀和求曼哈顿距离和)
题目链接 正经解法: 给定n个点的坐标,找一个点,到其他点的曼哈顿距离之和最小.n可以是100000.大概要一个O(nlogn)的算法.算曼哈顿距离可以把x和y分开计算排好序后计算前缀和就可以在O(1 ...
- 简进祥-SVN版本控制方案:多分支并行开发,多环境自动部署
两地同时开发一个产品,目前线上有3个环境:测试环境.预发布环境.生产环境.目前系统部署采用jenkins自动化部署工具 用jenkins部署的方案 jenkins 测试环境:配置了各个分支的svn 地 ...
- python 学习笔记7(类/对象的属性;特性,__getattr__)
27. 属性的__dict__系统 1)对象的属性可能来自: 其类的定义,叫做类属性 继承父类的定义 该对象实例定义(初始化对象时赋值),叫做对象属性 2)对象的属性存储在对象的 __dict__ 属 ...
- 基于SURF特征的目标检测
转战matlab了.步骤说一下: 目标图obj 含目标的场景图scene 载入图像 分别检测SURF特征点 分别提取SURF描述子,即特征向量 用两个特征相互匹配 利用匹配结果计算两者之间的trans ...
- 【poj2417】 Discrete Logging
http://poj.org/problem?id=2417 (题目链接) 题意 求解$${A^X≡B~(mod~P)}$$ Solution BSGS. 细节 map TLE飞,只好写了hash挂链 ...
- POJ2796 Feel Good 单调栈
题意:给定一个序列,需要找出某个子序列S使得Min(a[i])*Σa[i] (i属于S序列)最大 正解:单调栈 这题的暴力还是很好想的,只需3分钟的事就可以码完,以每个点拓展即可,但这样的复杂度是O( ...
- 修改phpMyAdmin中的默认1440超时时间
步骤一:修改PHP配置中session的过期时间. session.gc_maxlifetime = 1440 //改为 session.gc_maxlifetime = 14400 步骤二:修改ph ...
- 关于PHP代码审计和漏洞挖掘的一点思考
这里对PHP的代码审计和漏洞挖掘的思路做一下总结,都是个人观点,有不对的地方请多多指出. PHP的漏洞有很大一部分是来自于程序员本身的经验不足,当然和服务器的配置有关,但那属于系统安全范畴了,我不太懂 ...
- lua中的table、stack和registery
ok,前面准备给一个dll写wrapper,写了篇日志,看似写的比较明白了,但是其实有很多米有弄明白的.比如PIL中使用的element,key,tname,field这些,还是比较容易混淆的.今天正 ...
- 拉曼软件在win8上运行出错问题
前提:xp上安装运行都没错 xp的.NET 环境是4.0 ,win8 是64位系统.自带.NET Framework 3 (3.0 3.5) 和.NET Framework 4.51:源程序拷贝到w ...