PHP数组处理函数的使用array_reduce(二)

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

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

给定一个数组:

$ar = array(1,2,3,4,5);

如果要求得这个数组中各个元素之和。

方法一:

很自然的用foreach实现

1 $sum = 0;
2 foreach ($ar as $v) {
3     $sum+=$v;
4 }
5 echo $sum;

方法二:

我们可以用array_reduce实现。它是专门用来迭代数组的。该函数最多接收三个参数。

第一个参数接收数组

第二个参数函数名,也可以是匿名函数,函数有两个参数,分别代表$result和$item

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

1 function leijia($a,$b){
2     $a+=$b;
3     return $a;
4 }
5 $result = array_reduce($ar ,leijia);
6 echo $result;

继续优化,在PHP5.3以上中可以用匿名函数了。使代码更精简。

1 $result = array_reduce($ar ,function($a,$b){
2     $a+=$b;
3     return $a;
4 });

array_reduce的强大不仅如此。看下面的例子。将数组$arr的首个元素弹出,作为初始值,避免min($result[‘min‘], $item[‘min‘])中$result为空。

否则最终结果min是空的。

 1 $arr = array(
 2     array(‘min‘ => 1.5456, ‘max‘ => 2.28548, ‘volume‘ => 23.152),
 3     array(‘min‘ => 1.5457, ‘max‘ => 2.28549, ‘volume‘ => 23.152),
 4     array(‘min‘ => 1.5458, ‘max‘ => 2.28550, ‘volume‘ => 23.152),
 5     array(‘min‘ => 1.5459, ‘max‘ => 2.28551, ‘volume‘ => 23.152),
 6     array(‘min‘ => 1.5460, ‘max‘ => 2.28552, ‘volume‘ => 23.152),
 7 );
 8
 9 $initial = array_shift($arr);
10
11 $t = array_reduce($arr, function($result, $item) {
12     $result[‘min‘] = min($result[‘min‘], $item[‘min‘]);
13     $result[‘max‘] = max($result[‘max‘], $item[‘max‘]);
14     $result[‘volume‘] += $item[‘volume‘];
15
16     return $result;
17 }, $initial);

总之,这种写法比foreach更优雅,更少的定义变量。推荐使用。

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

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

实现效果:

时间: 2024-10-21 23:47:14

PHP数组处理函数的使用array_reduce(二)的相关文章

[C++程序设计]用数组名作函数参数

1. 用数组元素作函数实参 1 #include <iostream> 2 using namespace std; 3 4 int max_value(int x, int max) 5 { 6 return max > x ? max : x; 7 } 8 9 int main() 10 { 11 const int x = 3, y = 4; 12 int a[x][y]={{34,62,34,101},{45,67,3,0},{11,45,97,100}}; 13 int max

【426】C 传递数组给函数

参考:C 传递数组给函数 参考:C语言二维数组作为函数参数传递 参考:二维数组作为函数参数传递剖析(C语言)(6.19更新第5种) 总结: 一维数组参数,可以是地址.arr[].arr[n] 二维数组比较复杂,需要提供列的值,否则会报错,可参考上面的网址 #include <stdio.h> #include <stdlib.h> void myFunc1(int length, int *arr) { for (int i = 0; i < length; i++) { p

C++中关于二维数组作为函数参数传递的问题

在做数据结构迷宫实验的时候,要生成一个二维数组存储迷宫数据,为了保证程序的模块化,将生成部分单独放进一个函数migongsc()里.大致代码如下: 问题的关键就集中在了如何将主函数中声明的二维数组migong[8][9]传递到自定义函数中去. 耗费了一个晚上的时间,我总共整理出了三种办法: 方法1:模拟编译器寻址(本法来自CSDN博客,原文: http://blog.csdn.net/jatix/archive/2004/08/29/88150.aspx). 大体意思为:将二维数组当作参数的时候

一维数组和二维数组传出函数

#define LOCAL #include<cstdio> #include<cstdlib> #include<iostream> using namespace std; typedef int ElemType; const int maxSize=10; //传入函数的一维数组经过函数之后数组元素发生变化 int REV(int *a,int x,int y) { int i=x,j=y; while(i<j) { int temp=a[i]; a[i]

C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include <cstdio> void print(int *a[3]) { printf("%d\n",a[0][0]); } int main() { int a[2][3] = {1,2,3,4,5,6}; print(a); return 0; } 编译程序时候,在第10行提示错误信息:|

数组合并函数,二维数组相同字段合并到一起。

一般从数据库中提取数据时,会遇到各种各样类型的数据,要求也不尽相同.自己这两天开发的时候遇到一个很纠结的问题,如下: 比如一个二维数组是这样的: Array ( [0] => Array ( [uid] => 231 [username] => 123456 [active] =>aaaa [transfer] =>1111 ) [1] => Array ( [uid] => 231 [username] =>123456 [active] => bb

c语言中二维数组作函数参数以及二维数组的理解

当二维数组作函数参数接受主调函数中的二维数组时,退化为一个指向数组的指针. 在此引用<c与指针>中的观点:作为函数 参数的多位数组名的穿递方式和一维数组名相同--实际传递的是个指向数组第一个元素的指针.但是,两者之间的区别在于, 多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值.

二维数组作为函数的参数传递

如何将二维数组作为函数的参数传递,这是涉及到多维数组时经常要遇到的问题.长期来,我们往往知其然,但不知其所以然.这里简单总结一下. 1.<C程序设计>中讲到:可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如: void Func(int array[3][10]); void Func(int array[][10]); 二者都是合法而且等价,但是不能把第二维或者更高维的大小省略.两个示例程序如下: #include <

二维数组作为函数参数的几种方法

#include <stdio.h> #define N 5 void fun1(int a[N][N]) { int i,j; for (i=0;i<N;i++) { for (j=0;j<N;j++) { if (i>j) { a[i][j]+=a[j][i]; a[j][i]=0; } } } } void fun2(int **a,int m,int n) { int i,j; for (i=0;i<m;i++) { for (j=0;j<n;j++) {