PHP根据总数分配百分比

时间:2016-01-30 11:32:55

标签: 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然后我必须重新编写它并获得一个计算器,并以艰难的方式完成我的目标。有没有什么方法可以通过一个函数自动完成,我可以告诉总数,它可以将它分配到比例或什么?

第一个总是大于休息,然后第二个比休息大但小于第一个,第三个大于休息但小于第一个和第二个,依此类推。

1 个答案:

答案 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