2

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

我想在特定范围内获得 10 个随机数。但我想指定生成这些随机数的密钥或哈希值。因此,当我指定相同的密钥时,我总是会得到相同的随机数。

是否有可能,如果是,如何?感谢您提供任何帮助或提示。

说明:如果有人对我为什么要这样做感兴趣 - 它是针对食谱网站的,我希望整天显示完全相同的随机挑选的食谱(天数 = 键),因此它们每天都在变化,但整天保持不变。

4

4 回答 4

1

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

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

然后,下一个访问者只需通过查询该表的日期即可获得该列表。

这样,就有可能列出 y 天前随机挑选的食谱。

但是,如果您想保留随机挑选的食谱,而不是仅用于今天,则此实现很有用。

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

每天,第一个请求都会将此列设置为空,随机选择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
于 2013-09-16T10:28:24.013 回答
0

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

于 2013-09-16T10:28:35.427 回答
0

只需创建一个天数组,假设为工作日,然后获取当天的食谱:

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

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

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

于 2013-09-16T10:29:02.153 回答
0

这将始终根据一个键在$lowerRange和之间选择 10 个随机数:$upperRange

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

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

print_r($choices);
于 2018-03-06T14:46:38.000 回答