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 (今日知りました)は、設定されていなかった$t
ように、 foreach とは異なる出力を返し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