随机,但不应超过总数

时间:2014-09-25 12:59:13

标签: php random generator

rand(1,5)

..生成随机数,例如:4 3 2 3 2(总和等于14)。

我希望总数不超过x(也就是说5),所以在这种情况下,它可能是:

1 + 2 + 2 = 5
2 + 3 = 5

依此类推......只要sum < x

可变长度

我应该生成一个随机的,检查x,生成另一个,再次检查还是有另一种方式?

2 个答案:

答案 0 :(得分:4)

最明显的方法就是保持循环并生成一个越来越小的随机数,直到你被限制为止。

$min = 2;
$max = 5;
$randoms = [];
while ($max > $min) {
    $max -= ( $rand = rand($min, $max) );
    $randoms[] = $rand;
}

针对实际用例进行了更新(请参阅注释):

function generateRandomSpend($balance, $maximum = 5, $minimum = 2) {
    $amounts = array();

    while ($balance) {
        // If we can't add any more minimum-spends, stop
        if ($balance - $minimum < 0) {
            break;
        } else {
            // Don't generate pointlessly-high values
            $maximum = min($balance, $maximum);
            $balance -= $amounts[] = rand($minimum, $maximum);
        }
    }

    return $amounts;
}

print_r( $s = generateRandomSpend(10) );

您也可以

echo array_sum( generateRandomSpend(10) );

获取总支出的数值。

答案 1 :(得分:3)

这也有效,并提供您想要的结果

<?php
    $fixed = 5;
    $random = array();
    $no = 0;
    while(1) {
        $number = rand(1,5);
        $no +=$number; 
        if($no > $fixed) {
            break;
        }
        $random[]= $number;
    }
    ?>