所有访客每周都有随机数

时间:2016-09-19 19:22:52

标签: php

我想用这些要求显示1,000到1,999之间的随机数

  • 每周一显示一个新号码
  • 使用逗号分隔千位分隔符
  • 向所有访问者显示相同的号码

到目前为止我发现了:

<?php
srand(floor(date('U')) / (60*60*24*7)); 
$num = 100;
$a = rand() % $num;
echo $a;
echo "<br>";
$b = rand() % $num;
echo $b;
echo "<br>";
$c = rand() % $num;
echo $c;
echo "<br>";
$d = rand() % $num;
echo $d;
echo "<br>";
$e = rand() % $num;
echo $e;
?>

1 个答案:

答案 0 :(得分:1)

通过创建适当的种子,您可以执行此操作而无需存储结果。

您需要获得ISO-8601周编号年份和周数。您可以使用date('oW')生成此内容。今天(直到下周一)将返回201638

W的值每周一更改,而o的值每年都会更改,除非当前的W属于前一年或明年 - 在这种情况下使用该年份。 (换句话说,由于新的一年,年/周组合在一周中不会改变。)

一旦你有了这个组合,就可以使用它来为随机数生成器播种:

mt_srand((int)date('oW'));

然后在您的限制之间拉出随机数。使用固定种子,这将为每个访问者产生相同的值:

$number = mt_rand(1000, 1999);

然后格式化它以添加千位分隔符和输出:

echo number_format($number);

一起跳过中间变量:

mt_srand((int)date('oW'));
echo number_format(mt_rand(1000, 1999));

今天输出1,331

没有必要将生成的数字存储在任何地方,因为这可以为每个访问者可靠地重新生成相同的数字,每天直到下周一 - 此时您将获得一个新的种子,因此获得一个新的随机数(直到下一个星期一,如此。)

有关所用功能的更多信息,请参阅PHP manual