我需要在PHP中生成两个不相等的数字。
我知道可以使用 $random1 = (rand()%9);
生成0-9之间的随机数。我想在此基础上添加些内容。
谢谢!
$r = str_shuffle("0123456789");
$r1 = (int) $r[0];
$r2 = (int) $r[1];
$rnd1 = rand(0,9);
do {
$rnd2 = rand(0,9);
} while ($rnd1 == $rnd2);
$random1 = 4;
$random2 = 5;
$numbers = array_rand(range(0, 9), 2);
echo '<pre>';
print_r($numbers);
echo '</pre>';
$random1 = (rand() % 10)
$random2 = $random1 + (rand()%9)+1
这样它们就永远不会相等(因为至少会将1添加到$random1)
如果两个数字都必须在0-9之间,您只需要使用最后一个模运算即可:
$random1 = (rand() % 10)
$random2 = ($random1 + (rand()%9)+1 ) %10
function random($min, $max) {
$stack = range($min, $max);
shuffle($stack);
$nr1 = array_pop($stack);
$nr2 = array_pop($stack);
return array($nr1, $nr2);
}
shuffle
至少是线性的,所以对于 max
来说这不太可扩展。然而,如果你需要超过 2 个不同的随机数,那么这种方法可能很有效。 - Kobirand()%9
可以得到0到8(包括0和8)之间的数字。如果你想要0到9(包括0和9),你应该使用rand()%10
。我假设这是你想要的,但如果0到8是你真正想要的,你可以轻松地调整答案。rand()
)。虽然不太可能,但真正的随机数生成器可能会产生一串完全相同的数字,这会使循环解决方案不明智(你可能正在使用线性生成器,所以这可能不是个问题)。$random1 = (rand() % 10);
$random2 = (rand() % 9);
if $random2 >= $random1 {
$random2 = $random2 + 1;
}
$random2 >= $random1
。现在的方式仍然是错误的,而且数字可能相等。 - Kobi$r = mt_rand(0, 9);
$r2 = ($r || $r === 9) ? $r-1 : $r+1;
解释:
$r
:它是从0到9的数字。
$r2
:它总是从0到9,但不包括$r-1
或$r+1
。
更随机的方法是生成两个数字:
$r = mt_rand(0, 9);
$r2 = mt_rand(0, 9);
$r2 = $r!==$r2 ? $r2 : (($r || $r === 9) ? $r-1 : $r+1);
另外,如果您使用 PHP 7+,可以将 mt_rand 更改为 random_int。
如果你只需要唯一的数字,那么从零开始,每次增加1即可获得新的数字。
如果你需要随机的唯一数字,可以将之前的数字保存在列表中,当你需要一个新的数字时,生成随机数字,直到找到一个不在列表中的数字。
如果你需要唯一标识符,可以使用内置函数uniqid
。
$rands = array_rand(range(0,count($otherarray)),3);
接下来,展示那些键在$rands
里的条目。