PHP 根据总数分配百分比

  • 本文关键字:分配 百分比 PHP php
  • 更新时间 :
  • 英文 :


我正在尝试将 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

最新更新