реальное случайное число - PullRequest
2 голосов
/ 26 февраля 2011

У меня есть 5 JPG, названный 01.jpg, 02.jpg ..... 05.jpg.У меня есть небольшой скрипт, который генерирует число от 1 до 5 и покупает связанный с ним jpg ... хорошо ... Но каждый раз, когда я перезагружаю страницу, картинка "должна" быть случайной и такой разной, но только 5 изображений, я получаю то же изображение при перезагрузке "намного больше", чем я, что .... так что вопрос ... Горячий, чтобы убедиться, что при перезагрузке веб-страницы случайное число должно бытьмежду 1-5 и НЕ так же, как это было вторым раньше ... так что с этим я буду обязательно видеть на 5 последовательных перезагрузках по крайней мере 5 изображений! ....

php ajvascript пожалуйста

вот код:

<style type="text/css">
#photo { background-image: url(http://www.something/pano-0<?php echo mt_rand (1,5) ?>.jpg); } 
</style>

примечание: для людей, которые говорят, что это последовательность ... нет, мне нравится случайность ... по крайней мере, не выбирайте то же самое

скажем, если # 3 показывает, вы случайный ... и вы можете иметь 1,2,3,4,5, пусть получить 2, если 3, случайный выбор!

Ответы [ 5 ]

5 голосов
/ 26 февраля 2011

Очень похоже на ответ @Jon Snyder, но использует $_SESSION вместо $_GET:

<?php
    // initialize session
    session_start();

    // array of possible images
    $images = array('01.jpg', '02.jpg', '03.jpg', '04.jpg', '05.jpg');

    // check if user has seen an image before
    $last = isset($_SESSION['last_img']) ? $_SESSION['last_img'] : -1;

    // generate a random number that isn't the same as $last
    do { $num = rand(0, count($images)-1); } while ($num == $last);

    // display image
    echo '<img src="' . $images[$num] . '">' . PHP_EOL;

    // save last image in $_SESSION
    $_SESSION['last_img'] = $num;
?>
4 голосов
/ 26 февраля 2011

бросить кубик. Вы когда-нибудь получали одно и то же число дважды или даже три раза подряд? Вы сомневаетесь в случайности кубика?

С 5 изображениями у вас есть 20% шанс, что изображение на этот раз будет таким же, как и последнее. Вы не хотите случайного распределения. Вы просто хотите вращать их каждый раз. Мы обещаем не говорить вашим пользователям, что это не случайно;)

3 голосов
/ 26 февраля 2011

Когда вы делаете запрос на следующее изображение, добавьте параметр строки запроса с идентификатором текущего изображения.Затем в вашем php-коде возьмите значение и используйте его для генерации случайного числа, которое не совпадает.

http://yourdomain/randomPicture.php?last=1

<?php
$last = $_GET['last'];

do {
    $next = rand(5);
} while( $next != $last);

echo '<img src="/picture'.$next.'.jpg" />';

echo '<a href="/randomPicture.php?last='.$next.'" >next</a>';
2 голосов
/ 26 февраля 2011

Если вы действительно хотите, чтобы оно было случайным, вы будете использовать одно и то же число несколько раз подряд - особенно с таким небольшим диапазоном 1-5

Вы могли бы специально написать код, чтобы запомнить последнее число и, если новое число совпадает, сгенерировать снова - но на самом деле случайное число - это именно то.

Хорошо, технически это псевдослучайное число, но для того, с чем вы имеете дело, не имеет значения

0 голосов
/ 26 февраля 2011

Может помочь, если вы сможете поделиться кодом, который вы используете в настоящее время для генерации случайного числа. И даже если вы генерируете действительно случайные числа, вполне возможно не видеть все 5 изображений за 5 перезагрузок. На самом деле, это очень маловероятно.

Вот некоторый псевдокод, который может помочь:

int lastRandomNumber = -1;

function getRandom() : int {
 int temp = rand();
 while (temp == lastRandomNumber && lastRandomNumber != -1) { 
  temp = rand();
 }
 lastRandomNumber = temp;
 return lastRandomNumber;
}

Здесь хранится ссылка на последнее случайно сгенерированное число, и каждый раз, когда вы запрашиваете новое, оно будет продолжать восстанавливаться, пока не получит новое значение. Однако, в зависимости от вашего генератора, маловероятно, что вы застрянете в очень длинной петле.

edit: почему это было отклонено?

...