多维数组累加处理源码分享

问题描述:

从数据库取出的源数组:$s=array(array(‘date’=>20151202,’result’=>’200364:3′),array(‘date’=>20151201,’result’=>’200364:1′),array(‘date’=>20151201,’result’=>’200365:3′),array(‘date’=>20151201,’result’=>’200364:10′),array(‘date’=>20151201,’result’=>’200362:5′));

需要将相同date相同result前缀(:前面的编码)的result后缀值(:后面的值)累加,重组后获得新数组!

最终期望结果:图片中,上面为处理之前的数组遍历,下面为处理后的最终数组

屏幕快照 2015-12-04 下午5.32.12

实现源码:

可以在PHPthinking在线编程页面,直接运行,地址:http://tools.phpthinking.com/code.html

<?php
//初始化最终数组
$records=array();

//所有数据权重,key为编码,value为代表权重
$all = array(200360=>5,200361=>10,200362=>20,200363=>50,200364=>100,200365=>200,200366=>10000);

//数据源
$s=array(array('date'=>20151202,'result'=>'200364:3'),array('date'=>20151201,'result'=>'200364:1'),array('date'=>20151201,'result'=>'200365:3'),array('date'=>20151201,'result'=>'200364:10'),array('date'=>20151201,'result'=>'200362:5'));

//初始化中间赋值过度数组
$one=array();

//遍历并输出原数据,同时对相同日期相同编码的数据,统一求和
foreach($s as $row){
//源数据分解为数组形式
$result = explode(":", $row['result']);
//输出源数据
echo $row['date'].','.$result[0].','.$result[1].'<br>';
// 源数据日期和编码分别作为key,对相应值累加求和
if(isset($one[$row['date']][$result[0]])){
$one[$row['date']][$result[0]] += $result[1];
}else{
$one[$row['date']][$result[0]] = 0+$result[1];
}
}

//对累加后的数组,进行二次加工,加工出自己需要的数组
foreach ($one as $date => $values) {
foreach ($values as $key => $value) {
$q['date']=$date;
$q['result'] = $key;
$q['total']= $value;
$q['price']= $all[$key];
$records[] = $q;
}
}
//得到得到最终需要的数组
var_dump($records);

//格式化输出最终需要的数组
echo '<br>';
foreach($records as $value){
echo $value['date'].','.$value['result'].','.$value['total'].'<br>';
}
?>

打赏此文

如果您觉得本站的内容对您有所帮助,您可以扫描下面的二维码小额支付请我喝杯茶,感谢!打赏记录
支付宝
微信
承诺:凡打赏捐助的朋友,留言备注自己的邮箱,在打赏捐助时间点的6个月内,本站会每周邮件推送原创专业技术博文,供大家学习和参考!

留下评论

All fields marked (*) are required