我正在尝试为 foreach 循环中的每个项目分配一个不同的随机数,但我希望该数字保持不变一天。
我尝试简单地添加<?php echo rand(0,20); ?>
但这显然只是在每次刷新时创建一个随机数。
无论如何,我可以为每个项目保留相同的随机数一天,而无需将其添加到数据库中。
例如:
item 1 = 2
item 2 = 18
item 3 = 13
item 4 = 6
保持不变 1 天,然后更改
您可以通过编写自己的随机数生成器来做到这一点。本指南向您展示如何操作。
注意:以下代码来自站点点
class Random {
// random seed
private static $RSeed = 0;
// set seed
public static function seed($s = 0) {
self::$RSeed = abs(intval($s)) % 9999999 + 1;
self::num();
}
// generate random number
public static function num($min = 0, $max = 9999999) {
if (self::$RSeed == 0) self::seed(mt_rand());
self::$RSeed = (self::$RSeed * 125) % 2796203;
return self::$RSeed % ($max - $min + 1) + $min;
}
}
称呼它
// set seed
Random::seed(42);
// echo 10 numbers between 1 and 100
for ($i = 0; $i < 10; $i++) {
echo Random::num(1, 100) . '<br />';
}
现在使用 php date 函数根据当前日期设置种子
// set seed based on date with
Random::seed(date("z") + 1);
这将每年为您提供相同的数字。如果您不希望这样做,请使用 rubo77 的种子变量。使用此版本,您可以确保在不同的机器上获得相同的数字(不能保证使用 srand)。
也许你可以尝试这样的事情:
$not_random_at_all = base_convert(md5($item . date('l jS 'of F Y')), 16, 10);
其中$item
是您的物品编号(或任何标识该物品的编号)。
它只是将当前日期的 MD5-Hash 与您的项目编号连接为整数。
这意味着每天每个项目都有一个不同的随机数。
请记住,MD5 不是随机数生成器,您的结果可能会尽可能随机。
$seed = floor(time()/86400);
srand($seed);
foreach($list as $item){
echo $item.rand(0,20);
}
或在确定的时间间隔内获得相同的兰特值。另一个例子:你有一个由 20 个元素组成的数组,你需要每天获得一个随机项目,但在 24 小时内不会改变(想象一下"今天的照片"或类似
)。$seed = floor(time()/86400);
srand($seed);
$item = $examplearray[rand(0,19)];
每次加载页面 24 小时期间,您都会获得相同的值。