2

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

4

1 に答える 1