真正的随机数

时间:2011-02-26 00:14:12

标签: php javascript random

我有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,如果是3,则获得2,重新随机!

5 个答案:

答案 0 :(得分:5)

与@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;
?>

答案 1 :(得分:4)

掷骰子。你有没有连续两次甚至三次获得相同的数字?你怀疑骰子的随机性吗?

如果有5张图像,则此次图像有20%的可能性与最后一张图像相同。您不希望随机分发。你只想每次都旋转它们。我们保证不会告诉您的用户它并非真正随机;)

答案 2 :(得分:3)

当您请求下一个图像时,请附加一个查询字符串参数,其中包含当前图片的ID。然后在你的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>';

答案 3 :(得分:2)

如果你真的希望它是随机的,你会连续多次使用相同的数字 - 特别是在1-5的小范围内

您可以专门编码以记住最后一个数字,如果新数字匹配,则再次生成 - 但实际上,随机数就是那个。

好的,从技术上来说这是一个伪随机数,但对于你所处理的它没有任何区别

答案 4 :(得分:-1)

如果您可以共享当前用于生成随机数的代码,则可能会有所帮助。即使你正在生成真正随机的数字,也完全有可能在5次重新加载中看不到所有5个图像。事实上,这是不太可能的。

这是一些可能有帮助的伪代码:

int lastRandomNumber = -1;

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

这保留了对最后一个随机生成的数字的引用,每次你要求一个新数字时,它将一直重新生成,直到它获得一个新值。但是,根据您的发电机,您不太可能陷入很长的环路。

编辑:为什么这被投票了?