我怎样才能为每个循环中的每个项目添加一个随机数,但保持 1 天不变


How can I add a random number to each item in foreach loop but to stay the same for 1 day

我正在尝试为 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 小时期间,您都会获得相同的值。