Создайте два числа, которые НЕ равны в PHP - PullRequest
9 голосов
/ 11 октября 2009

Мне нужно сгенерировать два числа, которые НЕ равны в PHP.

Я знаю, что использую $random1 = (rand()%9); для генерации случайного числа от 0 до 9. Мне нужно кое-что добавить к этому, я думаю.

Спасибо!

Ответы [ 13 ]

49 голосов
/ 11 октября 2009
$r = str_shuffle("0123456789");
$r1 = (int) $r[0];
$r2 = (int) $r[1];
22 голосов
/ 11 октября 2009
$rnd1 = rand(0,9);
do {
  $rnd2 = rand(0,9);
} while ($rnd1 == $rnd2);
8 голосов
/ 11 октября 2009
$random1 = (rand() % 10)
$random2 = $random1 + (rand()%9)+1 

Таким образом, они никогда не равны (как минимум 1 будет добавлено к $ random1)

если оба числа должны быть от 0 до 9, вам просто нужно сделать это с последней мод-операцией:

$random1 = (rand() % 10)
$random2 = ($random1 + (rand()%9)+1 ) %10 
7 голосов
/ 11 октября 2009
$random1 = 4;
$random2 = 5;
5 голосов
/ 11 октября 2009
<code>$numbers = array_rand(range(0, 9), 2);

echo '<pre>';
print_r($numbers);
echo '
';
4 голосов
/ 11 октября 2009
function random($min, $max) {
    $stack = range($min, $max);
    shuffle($stack); 
    $nr1 = array_pop($stack);
    $nr2 = array_pop($stack);
    return array($nr1, $nr2);
}

Это может сделать трюк, не будучи математическим волшебником:)

2 голосов
/ 11 октября 2009

Я думаю, вы обнаружите, что 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;
}
1 голос
/ 05 октября 2015
$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

1 голос
/ 11 октября 2009

Если вы просто хотите уникальные номера , просто начните с нуля и добавьте +1 для каждого нового номера.

Если вам нужно случайных уникальных чисел , просто сохраните ваши предыдущие номера в списке, а когда вам нужно новое, просто генерируйте случайные числа, пока не найдете один, который не в этом списке.

Если вам нужны уникальные идентификаторы , вы можете использовать встроенную функцию uniqid.

0 голосов
/ 29 января 2014
$random_numbers = array();
for ($i = 0; $i <= 1; $i++)
{
  $random_numbers[$i] = rand(1,13);
}

Я решил это, поместив rand в массив внутри цикла for. Таким образом, я получил два разных случайных числа! Два числа помещаются в массив в два поля, random_numbers[0] и random_numbers[1]

...