5

我需要得到一个介于两者之间的随机数

0 - 80

120 - 200

我可以

$n1 = rand(0, 80);
$n2 = rand(120, 200);

但是我需要在 和 之间进行n1选择n2。无法做到

 $n3 = rand($n1, $n2)

因为这可能会给我一个80 - 120我需要避免的数字。

如何解决这个问题?

4

4 回答 4

8

由于两个范围的大小不同(即使只有 1 个数字),为了确保良好的随机分布,您需要这样做:

$random = rand( 0, 200 - 39 );
if ($random>=120-39) $random+=39;

最快的方法。:)

它的工作方式是假装它是一个范围,如果它最终选择了一个高于第一个范围的数字,我们将其增加以适应第二个范围。这确保了完美的传播。

于 2012-04-22T22:01:51.200 回答
5

由于两个范围具有相同的大小,您可以简单地使用rand(0, 1)来确定要使用的范围。

$n = rand(0, 1) ? rand(0, 80) : rand(120, 200);
于 2012-04-22T22:00:08.583 回答
1

得到两个随机数$n1$n2

$n1 = 兰德(0, 80);
$n2 = 兰德(120, 200);

定义名为$n3的新数组

$n3=数组();

使用 array_push() 函数将$n1$n2添加到数组$n3中

array_push($n3,$n1,$n2);

使用 array_rand() 函数从数组$n3中找到随机索引$find_index

$find_index=array_rand($n3,1);

显示结果

回声 $n3[$find_index];
于 2013-07-21T12:19:43.687 回答
1

PHP为此提供了一个新功能,也称为范围。非常易于使用,可以在 PHP 手册中找到。

它允许您输入最小/最大数字以从中获取范围。

<?php
echo range(0, 1000);
?

但从技术上讲,您也可以输入自己的两个数字作为数字范围。

于 2012-04-23T01:16:50.963 回答