【发布时间】:2009-10-11 10:26:50
【问题描述】:
我需要在 PHP 中生成两个不相等的数字。
我知道我使用$random1 = (rand()%9); 生成0-9 之间的随机数。我想我需要添加一些东西。
谢谢!
【问题讨论】:
我需要在 PHP 中生成两个不相等的数字。
我知道我使用$random1 = (rand()%9); 生成0-9 之间的随机数。我想我需要添加一些东西。
谢谢!
【问题讨论】:
$random1 = 4;
$random2 = 5;
【讨论】:
$numbers = array_rand(range(0, 9), 2);
echo '<pre>';
print_r($numbers);
echo '</pre>';
【讨论】:
$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 = (rand() % 10)
$random2 = $random1 + (rand()%9)+1
这样它们永远不会相等(因为至少 1 将添加到 $random1 )
如果两个数字都必须在 0-9 之间,您只需使用最后一个 mod 操作即可:
$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 个不同的随机数,这会很有效。
我想你会发现rand()%9 会给你一个介于 0 到 8 之间的数字。如果您想要 0 到 9(含),则应使用 rand()%10。我将假设这就是您想要的,但如果 0 到 8 是您真正想要的,您可以轻松调整答案。
如果您想要该范围内的两个数字,最简单的方法是在该范围内生成一个,然后在小于该范围的一个内生成另一个,如果相同或更大,则增加它。
这是执行此操作的数学方法,它是确定性的(总是两次调用 rand() 无论如何)。虽然不太可能,但真正的随机数生成器可以生成一串完全相同的数字,这会使循环解决方案变得不明智(您可能正在使用线性生成器,因此这可能不会成为问题)。
在第一次尝试时,您可以选择全部范围(10 个数字,0 到 9)。在第二个你有完整的范围减去已经选择的数字。因此,如果您的第一个数字是 7,则生成一个从 0 到 8 的数字并将 7 映射到 8 和 8 到 9:
$random1 = (rand() % 10);
$random2 = (rand() % 9);
if $random2 >= $random1 {
$random2 = $random2 + 1;
}
【讨论】:
$random2 >= $random1。以你现在的方式,赔率仍然是错误的,数字最终可能相等。
如果您只是想要唯一数字,只需从零开始,然后为每个新数字添加 +1。
如果您需要随机唯一数字,只需将您以前的数字保存在一个列表中,当您需要一个新数字时,只需生成随机数字,直到找到一个,这不是 em> 在那个列表中。
如果需要唯一标识符,可以使用内置函数uniqid。
【讨论】:
$r = mt_rand(0, 9);
$r2 = ($r || $r === 9) ? $r-1 : $r+1;
解释:
$r:0到9的数字。
$r2:总是从 0 到 9 但$r-1 或$r+1
更随机的方式是生成 2 个数字:
$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
【讨论】:
Alix Axel 的解决方案是最直接的,对我来说效果很好。我想要一个现有数组中的三个随机条目,所以我使用了
$rands = array_rand(range(0,count($otherarray)),3);
然后显示密钥在$rands 中的条目。
【讨论】:
$random1 = rand() % 9;
$random2 = ($random1 + 1) % 9;
【讨论】:
相当重地解释您的问题,您似乎想在 0 和 9 之间伪随机生成 2 个不同的整数?
所以生成第一个,生成另一个,如果它与第一个重复,直到它不是。
我毫无理由地断言,这将与任何其他方法一样有效。
【讨论】:
$random_numbers = array();
for ($i = 0; $i <= 1; $i++)
{
$random_numbers[$i] = rand(1,13);
}
我通过将 rand 放在 for 循环内的数组中解决了这个问题。这样我得到了两个不同的随机数!这两个数字放在数组中的两个字段中,random_numbers[0] 和 random_numbers[1]
【讨论】:
rand() 仍然可以在 random_numbers[0] 和 random_numbers[1] 中生成 6。