我正在尝试将 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
那么我将不得不重写它并得到一个计算器,并以艰难的方式完成我的目标。有什么方法可以通过一个函数自动完成,我可以告诉总数,它可以将其分配到比例或其他东西?
然后第二个大于休息但小于第一个,第三个大于静止但小于第一个,依此类推。
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
。