php 计算任意多个结构相同的多维数组的每个元素的平均值

最近遇到这样一个计算需求.

有N 个结构相同的数组.

例如

$x = array(
	0=>array(1,'ab'=>array(1,2),'x'=>5),
	1=>array(2,'ab'=>array(3,4),'x'=>1),
	2=>array(3,'ab'=>array(3,4),'x'=>2),
	...
	N=>array(10,'ab'=>array(5,6),'x'=>10)
);

数组 x 中包含了 N 个结构相同的数组.这些数组也是多维数组.

但多维数组最终的元素都是数字.

现在要计算这N 个数组最终元素的平均值,并生成一个同样结构的多维数组

元素和这N 个数组结构相同,但元素的值为这N 个数组元素的平均值


比如N =3 的时候

那么生成的数组

第一个 元素的值 应该为  (1+2+3+10)/4 = 4

其他元素以此类推

最终应得到这样一个数组

array(4,'ab'=>array(3,4),'x'=>4.5)

实现原理不复杂,就是数组递归遍历,递归到最后一层时

把N个数组的元素值相加再除以N 即得到最终数组的元素值.

那么直接上代码

$x = array(
	0=>array(1,'ab'=>array(1,2),'x'=>5),
	1=>array(2,'ab'=>array(3,4),'x'=>1),
	2=>array(3,'ab'=>array(3,4),'x'=>2),
	3=>array(10,'ab'=>array(5,6),'x'=>10)
);
$c = array();
average_multip_array($x,$c,count($x));
function average_multip_array($arr1,&$arr2,$i){
	foreach($arr1[0] as $k=>$v){
		if(!is_array($v)){
			for($n=0;$n<$i;$n++){
				$arr2[$k]+=$arr1[$n][$k];
			}
			$arr2[$k]=$arr2[$k]/$i;
		}else{
			for($n=0;$n<$i;$n++){
				$tmp[$n] = &$arr1[$n][$k];
			}
			average_multip_array($tmp,$arr2[$k],$i);
		}
	}
}
var_dump($c);

 输出

array(3) {
  [0]=>
  int(4)
  ["ab"]=>
  array(2) {
    [0]=>
    int(3)
    [1]=>
    int(4)
  }
  ["x"]=>
  float(4.5)
}

里面用到的一个技巧就是数组元素的引用.可以大大简化代码量


转载于:https://my.oschina.net/jiuxiaoyao/blog/194960

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值