对于后台程序的报表系统,我们常常会遇到一些问题。比如:对于数据的按照相应的粒度进行分组求和问题。
首先,我们来描述一个情景,当我们目前拥有区间段内的数据$Array[ [数据,时间] ,...],时间粒度$TimeList[time1 , time2 , time3...],我们要对数据进行分组求和,
给一个比较快捷的算法:
数据:
1 $array1 = [ 2 10,20,30,40,50 3 ]; 4 $array2 = [ 5 [1,0], 6 [3,4], 7 [5,15], 8 [7,25], 9 [9,26], 10 [15,30], 11 [17,35], 12 [12,46], 13 [3,48], 14 [8,50], 15 16 ]; 17 18 算法函数: 19 /** 20 * 求取粒度分组后的介于粒度区间数据的SUM 21 * @param $Array 数组 22 * @param $TimeList 粒度序列 23 * @return array 一维数组 24 */ 25 function($Array , $TimeList){ 26 $LengthArray = count($Array); 27 $LengthTimeList = count($TimeList); 28 $res = []; 29 //初始化返回数组4 30 for($i = 0;$i < $TimeList;$i++){ 31 $res[$i] = 0; 32 } 33 //分组求和 34 $i = 0; 35 $j = 0; 36 for(;$i<$LengthTimeList;$i++){ 37 for(;$j<$LengthArray;$j++){ 38 if($TimeList[$j][1] > $Array[$i]){ 39 break; 40 } 41 //根据不同的需求而定 42 $res[$i] += $Array[$j][0]; 43 } 44 } 45 return $res; 46 } 47 48 注:本文章仅代表个人思维,欢迎指点批评。