Andreas Korthaus: Random

Beitrag lesen

Hi!

»» Hier mal mein Quelltext falls da ein Fehler sein sollte
»»
»»      mt_srand(microtime()*1000000);
»»      $zufall = mt_rand(0,450);

Ist denke ich kein Fehler, Du willst vermutlich nur was anderes als eine Zufallszahl die rand()/mt_rand() liefert.

»» Kennt jemand eine gute alternative?

Wenn Dir die "Güte" der Zufallszahl nicht so wichtig ist und dafür mehr Gleichmäßigkeit willst, könntest Du eine Art "Gedächtnis" einbauen, in dem sich das Script merkt welche Zahlen es bereits ausgegeben hat. Z.B. so:

  
<?php  
$available_numbers = apc_fetch('available_numbers');  
if (!$available_numbers) {  
  $available_numbers = range(0, 450);  
}  
$random_number = array_rand($available_numbers);  
unset($available_numbers[$random_number]);  
apc_store('available_numbers', $available_numbers);  
echo 'random number: ', $random_number;  
?>  

Hierbei habe ich jetzt zur Vereinfachung mal Funktionen des APC verwendet, um den Array serverseitig zu speichern. Alternativ kann man auch z.B. eine Textdatei oder Datenbank verwenden, um die Daten zu speichern. Wahrscheinlich ist serialize() hierfür ganz hilfreich.

Bedenke aber, dass die erreichte Gleichmäßigkeit nur für die Gesamtheit der User gilt. Wenn Du gleichzeitig mit 500 anderen Leuten auf der Seite bist, merkst Du davon vermutlich nicht mehr viel in Deinem eigenen Browserfenster. Wenn Du es aus User-Sicht gleichmäßig haben willst, könntest Du den Array in einer Session speichern, somit hat jeder User sein eigenes Gedächtnis. Kommt halt drauf an was genau Du erreichen willst.

Grüße
Andreas

PS: Mensch, war ja schon lange nicht mehr hier... ;-)