phpbar.de logo

Mailinglisten-Archive

[php] Pseudozufallszahlen

[php] Pseudozufallszahlen

Guido Haeger GH-lists_(at)_ecora.de
Thu, 31 Aug 2000 11:44:13 +0200


Guido Haeger schrieb

>  shuffle($array);

Ich habe gerade mehrfach in einer Schleife 10.000 mal jeweils 3 Zahlen
zwischen 1 und 100 mit der oben genannten Funktion generieren lassen.
Das Ergebnis unter Nutzung von shuffle() ist demnach wenig zufällig.

Ausgegegeben wurden durschnittlich etwa:

2200 x 98
2200 x 97
1500 x 99
820 x 100

alle restlichen Zahlen zwischen 1 und 96 wurden nur zwischen 320 und 200
"zufällig" ausgewählt. D.h. 98 und 97 kommen im Ergebnisarray etwa 10
mal häufiger vor als andere Zahlen. Zumindest unter PHP4 ist
nachfolgende Funktion deshalb besser geeignet

function generate_numbers($min, $max, $anz)
{
 $array = range($min, $max);
 srand ((double)microtime()*1000000);
 for($x = 0; $x < $anz; $x++)
 {
  $i = rand(1, count($array))-1;
  $erg[] = $array[$i];
  array_splice($array, $i, 1);
 }
 return $erg;
}

// 5 eindeutige Zahlen im Bereich von 1 bis 100 ermitteln
$zufalls_array = generate_numbers(1, 100, 5);
echo join("; ", $zufalls_array);



php::bar PHP Wiki   -   Listenarchive