如何从2个不同的数字范围中选择1个随机数?

时间:2012-04-22 21:58:29

标签: php random

我需要得到一个介于

之间的随机数
0 - 80

120 - 200

我能做到

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

但我需要在n1n2之间进行选择。不能做

 $n3 = rand($n1, $n2)

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

如何解决这个问题?

4 个答案:

答案 0 :(得分:8)

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

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

最快的方法。 :)

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

答案 1 :(得分:5)

由于两个范围的大小相同,因此您只需使用rand(0, 1)来确定要使用的范围。

$n = rand(0, 1) ? rand(0, 80) : rand(120, 200);

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

获取两个随机数 $ n1 $ n2

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

定义名为 $ n3

的新数组
$n3=array();

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

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

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

$find_index=array_rand($n3,1);

显示结果

echo $n3[$find_index];