Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何向foreach循环中的每个项目添加一个随机数,但保持不变1天_Php_Random_Numbers - Fatal编程技术网

Php 如何向foreach循环中的每个项目添加一个随机数,但保持不变1天

Php 如何向foreach循环中的每个项目添加一个随机数,但保持不变1天,php,random,numbers,Php,Random,Numbers,我试图在foreach循环中的每个项目上分配一个不同的随机数,但我希望该数字保持不变一天 我试着简单地添加,但这显然只是在每次刷新时创建一个随机数 不管怎样,我可以将每个项目的相同随机数保留一天,而不将其添加到数据库中 例如: item 1 = 2 item 2 = 18 item 3 = 13 item 4 = 6 保持不变1天,然后改变也许您可以尝试以下方法: $not_random_at_all = base_convert(md5($item . date('l jS \of F Y'

我试图在foreach循环中的每个项目上分配一个不同的随机数,但我希望该数字保持不变一天

我试着简单地添加
,但这显然只是在每次刷新时创建一个随机数

不管怎样,我可以将每个项目的相同随机数保留一天,而不将其添加到数据库中

例如:

item 1 = 2
item 2 = 18
item 3 = 13
item 4 = 6

保持不变1天,然后改变

也许您可以尝试以下方法:

$not_random_at_all = base_convert(md5($item . date('l jS \of F Y')), 16, 10);
其中,
$item
是您的项目编号(或标识该项目的任何内容)

它只是将当前日期的MD5哈希值与您的项目编号连接起来,转换为整数

这意味着每天每种商品都有一个不同的随机数

请记住,MD5不是随机数生成器,您的结果可能不会尽可能随机

$seed = floor(time()/86400);
srand($seed);
foreach($list as $item){
  echo $item.rand(0,20);
}
或在确定的时间间隔内获得相同的rand值。 另一个例子:你有一个由20个元素组成的数组,你需要每天获得一个随机项,但不需要在24小时内改变(想象一下“今天的照片”或类似内容)


在整个24小时内,每次加载页面时都会获得相同的值。

您可以通过编程自己的随机数生成器来实现这一点

注:以下代码来自

叫它

// set seed
Random::seed(42);

// echo 10 numbers between 1 and 100
for ($i = 0; $i < 10; $i++) {
    echo Random::num(1, 100) . '<br />';
}

这将为您提供每年相同的数字。如果您不希望这样,请使用rubo77的seed变量。使用此版本,您可以确保在不同的机器上获得相同的编号(srand不能保证).

使用
会话
而不是将它们插入
数据库
在实际生成任何随机数之前,使用日期为随机数生成器设定种子我已尝试添加会话,但每个数字都需要多个会话-我不确定如何使用随机数创建
数组
,然后保存
array
with
sessions
在循环中您将如何执行此操作-抱歉,有点麻烦!你会怎么回应呢?那只会产生一个随机数,不是吗?他希望每个项目都有一个不同的随机数。在循环中:
echo$item
我添加了另一个示例random::seed(date(“zy”)+1)不会每年给出相同的结果。我不确定是否有反对票,但这似乎对我有效。但是有一件事——我怎样才能使随机数变小呢?我想对随机数做一个if语句,但是它们现在非常大,你可以使用
crc32
而不是
md5
,谢谢,这肯定更小-我想最好是两位数字如果你只使用1到100之间的数字,那么可能会有多个项目具有相同的“随机”数。如果这是您关心的问题,它也不会提高应用程序的性能。如果您仍然希望使用较小的数字,则可能需要使用模数运算符(%)。
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 />';
}
// set seed based on date with 
Random::seed(date("z") + 1);