我试图将100%分配给总数(不一样),可以手动完成,但我正在寻找PHP中的自动方式。我不得不打开计算器并完成手动操作。
我想要实现的结果与此相似:
$value = 10000;
$total_numbers = 9
$a1 = $value*0.2;
$a2 = $value*0.175;
$a3 = $value*0.15;
$a4 = $value*0.125;
$a5 = $value*0.1;
$a6 = $value*0.08;
$a7 = $value*0.07;
$a8 = $value*0.05;
$a9 = $value*0.04;
正如您所看到的,第一个变量的数量多于后者,但如果添加这些变量,则 1 100%。所以我要说total_numbers=20
然后我必须重新编写它并获得一个计算器,并以艰难的方式完成我的目标。有没有什么方法可以通过一个函数自动完成,我可以告诉总数,它可以将它分配到比例或什么?
第一个总是大于休息,然后第二个比休息大但小于第一个,第三个大于休息但小于第一个和第二个,依此类推。
答案 0 :(得分:2)
function distributeValue($value, $num) {
$parts = $num * ($num + 1) / 2;
$values = [];
for ($i = $num; $i > 1; --$i) {
$values[] = round($value * $i / $parts);
}
$values[] = $value - array_sum($values);
return $values;
}
var_dump(distributeValue(10000, 9));
这可以通过计算$num
三角形数字(通过将所有数字从1添加到$num
得到的数字)并将总值除以这个数量来计算。
然后从$num
部分开始,然后是$num-1
个部分,依此类推。
由于它是对数字进行四舍五入,最后一步是取总数减去所有其他值,即大约一部分。如果你可以获得浮点数而不是整数,那么你可以移除$values[] = $value - array_sum($values);
行并将for
循环的条件更改为$i > 0
。