最近碰到一个需求,一个一级分类加一个数值,其下的二级分类要平均的得到相应的数值。
于是,第一想法是,谷姐度娘一下,没找到PHP方面类似的方法。
就自己弄出来个这样的算法,不知道有没有谁写过。
<?php
/**
* 将一个数值切成N份
* @param int $number 切的数值
* @param int $avgNumber 份数
* @return array
*/
function numberAvg($number, $avgNumber)
{
if($number == 0) {
$array = array_fill(0, $avgNumber, 0);
} else {
$avg = floor($number / $avgNumber);
$ceilSum = $avg * $avgNumber;
$array = array();
for($i = 0; $i < $avgNumber; $i++) {
if($i < $number - $ceilSum) {
array_push($array, $avg + 1);
} else {
array_push($array, $avg);
}
}
}
return $array;
}
echo '<pre>';print_r(numberAvg(13, 10));
得到数据如下
Array
(
[0] => 2
[1] => 2
[2] => 2
[3] => 1
[4] => 1
[5] => 1
[6] => 1
[7] => 1
[8] => 1
[9] => 1
)