PHP 5.2 或 5.4 上的此代码产生可预测的顺序,但在 PHP 5.3srand(seed)
上被忽略。
$n = date('YmdHi');
$a = explode('|','uno|due|tre|quattro|cinque');
printf("%s\n",$n);
print_r($a);
srand($n);
shuffle($a);
print_r($a);
更紧凑的代码(我希望在同一分钟有相同的数字,但在 PHP 5.3 上它不起作用):
$n = date('YmdHi');
srand($n);
printf("%s\n",rand(1,100));
你可以在这里尝试不同版本的 PHP http://sandbox.onlinephpfunctions.com/code/fromFunction/srand
更新
@likeitlikeit 根据文档,如果您srand()
在之前设置种子(带有)rand()
,rand()
则函数应该为每次运行返回相同的输出。当您想要基于任意整数(在我的情况下为日期)的可预测“rand”输出时,这很有用。
这段代码应该为每个$t
in产生相同的输出foreach
,但这似乎不适用于所有 PHP 版本。PHP 5.3 和 5.1(我今天发现)返回不同的输出 foreach $t
,就像srand()
未设置一样。
foreach(range(1,10) as $t){
srand('20130605'); printf("| %s ",rand(1,100));
}
PHP 5.4.x
| 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40
PHP 5.3.x
| 61 | 30 | 68 | 16 | 97 | 24 | 5 | 36 | 90 | 24
PHP 5.2.x
| 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40
PHP 5.1.x
| 8 | 96 | 15 | 7 | 25 | 17 | 4 | 70 | 46 | 99
PHP 5.0.x
| 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40