是指关于Divide a single number into a set of unique random numbers in PHP
的旧问题感谢https://stackoverflow.com/users/1545088/matei-mihai的代码
function generateRandomNumbers($max, $count){
$numbers = [];
for ($i = 1; $i < $count; $i++) {
$random = mt_rand(0, $max / ($count - $i));
$numbers[] = $random;
$max -= $random;
}
$numbers[] = $max;
shuffle($numbers);
return $numbers;
}
echo '<pre>';
print_r(generateRandomNumbers(100, 10));
echo '</pre>';
使用上面的编码,如何获得没有零(0)的结果?
更新:如果我将$ max = 10和$ count = 20(generateRandomNumbers(10,20))更改为零,我希望得到除0(零)之外的带小数的结果
Array
(
[0] => 2
[1] => 0
[2] => 1
[3] => 2
[4] => 0
[5] => 1
[6] => 0
[7] => 0
[8] => 0
[9] => 0
[10] => 0
[11] => 0
[12] => 1
[13] => 0
[14] => 3
[15] => 0
[16] => 0
[17] => 0
[18] => 0
[19] => 0
)
通过使用这些值generateRandomNumbers(10,20)并具有不带零但带小数的结果吗?
答案 0 :(得分:0)
您必须使用此代码块。
function generaenter code hereteRandomNumbers($max, $count){
$numbers = [];
for ($i = 1; $i < $count; $i++) {
$random = mt_rand(1, $max / ($count - $i));
$numbers[] = $random;
$max -= $random;
}
$numbers[] = $max;
shuffle($numbers);
return $numbers;
}
echo '<pre>';
print_r(generateRandomNumbers(100, 10));
echo '</pre>';
答案 1 :(得分:0)
您可以使用这组代码
function random_float($min, $max) {
return random_int($min, $max - 1) + (random_int(0, PHP_INT_MAX - 1) / PHP_INT_MAX );
}
function generateRandomNumbers($max, $count){
$randoms = [];
for ($i=0; $i <$count ; $i++) {
if($i>0)
{
while(1){
$this_random = random_float(0.1,$max);
if(!in_array($this_random,$randoms))
{
$randoms[] = $this_random;
break;
}
}
}
else {
$this_random = random_float(0.1,$max);
$randoms[] = $this_random;
}
}
$numbers = [];
$sum_of_randoms = array_sum($randoms);
foreach ($randoms as $key => $value) {
$numbers[] = ($value/$sum_of_randoms) * $max;
}
return $numbers;
}
echo array_sum(generateRandomNumbers(10,20));
echo '<pre>';
print_r(generateRandomNumbers(10,20));
echo '</pre>';
我现在更新了代码,该代码使特定的浮动随机数数组的总和为$max
。您可以实时测试代码here