话不多说,代码,不懂原理和用途的可以参考评论/***根据给定的合计值返回每个单元的值最大平均数**@paraminteger$num要求平均的合计值*@paramarray$data提供的数据**@example$num=12*$data=[*"a"=>5,*"b"=>6,*"c"=>2,*]**@return[*"a"=>5,*"b"=>5,*"c"=>2,*]*/if(!function_exists('get_avg_data')){functionget_avg_data($num,array$data){$sum=array_sum($data);//如果数组中的值小于要求的值if($num>=$sum){$reData=$data;}else{分类($数据);$reData=handle_avg_data($num,$data);}返回$reData;}}//处理数据if(!function_exists('handle_avg_data')){functionhandle_avg_data(&$num,array&$data){$n=count($data);$avg=(int)($num/$n);$y=$num%$n;$reData=[];$preData=$数据;foreach($dataas$key=>$value){if($value<=$avg){$reData[$key]=$value;取消设置($数据[$key]);$num=$num-$value;}}if(count($preData)==count($data)){if($y==0){foreach($dataas$k=>$v){$reData[$k]=$avg;取消设置($数据[$k]);}}else{foreach($dataas$k=>$v){$reData[$k]=$avg+1;$num=$num-$avg-1;取消设置($数据[$k]);休息;}}}$reD=[];如果(count($data)>0){$reD=handle_avg_data($num,$data);}返回array_merge($reData,$reD);}}好吧,再举个例子eg①:我一共需要30条数据,数据库中符合条件的数据有4类,它们的总数分别是4、5、15、19我要为了获得尽可能理想的数据,所以我应该分别返回4、5、11、10。例②:我总共需要30条数据。数据库中有4种满足条件的数据。他们的总数分别是12、6、15和19。我想得到尽可能理想的数据,所以应该分别返回8,6,8,8。...上面的代码就是这样做的。
