我需要生成两个在PHP中不相等的数字。
我知道我使用$random1 = (rand()%9);
随机生成0-9之间的数字。我想我需要添加一些内容。
谢谢!
答案 0 :(得分:49)
$r = str_shuffle("0123456789");
$r1 = (int) $r[0];
$r2 = (int) $r[1];
答案 1 :(得分:22)
$rnd1 = rand(0,9);
do {
$rnd2 = rand(0,9);
} while ($rnd1 == $rnd2);
答案 2 :(得分:8)
$random1 = (rand() % 10)
$random2 = $random1 + (rand()%9)+1
通过这种方式,它们永远不会相等(因为至少1将被添加到$ random1)
如果两个数字必须都是0-9,你只需要进行最后的mod操作:
$random1 = (rand() % 10)
$random2 = ($random1 + (rand()%9)+1 ) %10
答案 3 :(得分:7)
$random1 = 4;
$random2 = 5;
答案 4 :(得分:5)
$numbers = array_rand(range(0, 9), 2);
echo '<pre>';
print_r($numbers);
echo '</pre>';
答案 5 :(得分:4)
function random($min, $max) {
$stack = range($min, $max);
shuffle($stack);
$nr1 = array_pop($stack);
$nr2 = array_pop($stack);
return array($nr1, $nr2);
}
这可能会成为诀窍而不是数学巫师:)
答案 6 :(得分: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;
}
答案 7 :(得分:1)
如果您只想要唯一号码,只需从零开始,为每个新号码添加+1。
如果您需要随机唯一数字,只需将以前的数字保存在列表中,当您需要新数字时,只需生成随机数,直到找到一个,不在该列表中。
如果您需要唯一标识符,则可以使用内置函数uniqid
。
答案 8 :(得分:1)
$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
答案 9 :(得分:0)
Alix Axel的解决方案是最直接的,对我来说很好。我想从现有数组中输入三个随机条目,所以我使用了
$rands = array_rand(range(0,count($otherarray)),3);
然后显示密钥位于$rands
的条目。
答案 10 :(得分:-1)
相当大地解释你的问题看起来你想伪随机生成0到9之间的2个不同的整数?
所以生成第一个,生成另一个,如果它与第一个重复相同,直到它不是。
我毫无理由地断言,这将与任何其他方法一样有效。
答案 11 :(得分:-1)
$random1 = rand() % 9;
$random2 = ($random1 + 1) % 9;
答案 12 :(得分:-1)
$random_numbers = array();
for ($i = 0; $i <= 1; $i++)
{
$random_numbers[$i] = rand(1,13);
}
我通过将rand
放在for循环中的数组中来解决它。这样我得到两个不同的随机数!这两个数字放在数组中的两个字段random_numbers[0]
和random_numbers[1]