【发布时间】:2017-01-25 21:36:44
【问题描述】:
我需要在给定范围内生成一个随机数。该数字必须在一年中的每个新月份都不同,并且它不应与该给定月份的前一年生成的数字相同(尽管理论上这是可能的)。
我正在考虑将 php rand($min, $max) 函数与 date("w") 结合使用,我正在努力解决每年需要获得不同结果的部分。
为了说明我的意思,请检查:
$numbers = range(1, 100); //our random array
echo $numbers[date("w")]; //date("w") returns number of week
这里有两个问题:1) 它不是真正随机的,2) 每年的数字都相同,3) 它不反映数组的整个大小,因为 date("w") 返回一个数字介于 1 到 52 之间。
你认为这在纯 PHP 中可以实现吗?还是我需要为此做一个 cronjob?
感谢您的帮助。
【问题讨论】:
-
不能把随机生成的数字存起来,每个月生成一个新的吗?
-
是的,我可以这样做,但我想知道是否有办法不存储它。也许这有点疯狂;)
-
原理很简单:对
date('Ym')的值进行哈希运算。这为您提供了一个与当前月份唯一相关的所有意图和目的的随机值。哈希通常会产生一个十六进制或二进制值,因此您只需将其基本转换为十进制。要将其限制在一定范围内,请应用模数等操作。 -
我喜欢散列的想法,确实很有用,谢谢!
-
能否生成一个随机数,选择最接近的 12 倍数,然后加上当前月份数?例如,如果随机数是 616,则 12 的最接近的倍数是 612。加 0(因为是 1 月)给你的最终答案是 612。