PHP - 按键始终获得相同的随机数

时间:2013-09-16 10:21:40

标签: php random

也许我正在尝试一些不可能的事情,这就是我要问的原因:-)

我想在特定范围内获得10个随机数。但我想指定生成这些随机数的密钥或散列。因此,当我指定相同的密钥时,我将始终获得相同的随机数。

是否有可能,如果是的话,怎么样?感谢您的帮助或提示。

说明:如果有人感兴趣我为什么要这样做 - 它是食谱网站,我希望全天显示完全相同的随机挑选食谱(日数=密钥)所以他们每天都会改变,但整天都保持不变长。

4 个答案:

答案 0 :(得分:1)

我会亲自去寻找你所建议的存储版本。

每天,向网站提出的第一个请求将选择n个随机食谱,并将它们存储在数据库中的“recipe_by_days”表中,其中包含当天(2013-09-16)和挑选食谱列表。 / p>

然后,下一个访问者只需通过今天查询该表来获取列表。

这样,就可以列出在几天前出来的随机挑选的食谱。

但是,如果你想让随机挑选的食谱比现在更多,这个实现很有用。

现在,如果您只想显示当天相同的随机选择食谱,而不是保留历史记录,那么您可以在配方表中添加一个可以为空的列。

每天,第一个请求会将此列设置为null,选择n个随机配方,并将这些列更新为当前日期。

算法非常简单:

Select the recipes that have "today_random" set to "today".
If none is returned (because they are in "yesterday" state) :
     Set the column "today_random" from all the recipes to null
     Pick n random recipes, update the "today_random" column of these to "today"
     Return these selected recipes
else return the result

答案 1 :(得分:0)

看起来这篇文章有你想要的功能: http://www.php.net/manual/en/function.srand.php#90215

答案 2 :(得分:0)

只需创建一个天数组,让我们假设为工作日,并获取当天的收件人:

$recipies = array(
  0 => array(...), // sunday
  1 => array(...), // monday
  2 => array(...), // tuesday
  ...
);

print_r($recipies[date("w")]); // current weekday's recipies

然后,您可以使用array_shuffle或其他方式随机使用该特定数组。

答案 3 :(得分:0)

根据密钥,这将始终在$lowerRange$upperRange之间选择10个随机数:

mt_srand(crc32('your-key'));
$lowerRange = 100;
$upperRange = 200;

for ($i = 0; $i < 10; $i++) {
    $choices[] = mt_rand($lowerRange, $upperRange);
}

print_r($choices);