Mehrere verschiedene Zufallszahlen

September 2009

Diese kleine Funktion generiert mehrere Zufallszahlen, ohne dass dabei Zahlen mehrmals vorkommen können.

Die Funktion speichert die generierten Zahlen als Key in den Array, wodurch keine doppelt vorhandenen Zahlen entstehen können, da sie sich "überschreiben".
Wenn die gewünschte Anzahl Zufallszahlen erreicht ist, oder wenn alle Zahlen zwischen Minimum und Maximum bereits Verwendung finden, wird die Schleife abgebrochen und das Array mit den Zufallszahlen als Values zurückgegeben.
<?php
/*
@param  int  $quant # Anzahl Zufallszahlen
@param  int  $min   # kleinstmögliche Zahl
@param  int  $max   # grösstmögliche Zahl
@return array  $randary
*/
function getRandoms($quant=1$min=0$max=1){
  
$randary = array();
  while(!(
count($randary) >= $quant || count($randary) > $max-$min))
    
$randary[mt_rand($min,$max)] = true// Zufallszahl in Key speichern
  
return array_keys($randary);
}
?>
Mögliche Anwendung: Lotto.
<?php
$randoms 
getRandoms(6145);
echo 
implode(', '$randoms);
# Mögliche Ausgabe: 23, 8, 29, 42, 15, 33
?>

Folgende Funktion macht dasselbe wie oben, nur auf einem anderen Weg.
<?php
function getRandoms($quant=1$min=0$max=1){
  
$randary range($min$max);
  
shuffle($randary);
  
array_splice($randary$quant);
  return 
$randary;
}
?>
Allerdings ist letztere Funktion auch bei kleinen Parametern z.T. deutlich langsamer als die erste, und sie kann schnell mal das Memory-Limit knacken. Daher: nicht benutzen.

Siehe auch:
 
PHP


Andere Einträge


Kommentare

#1
von monopunk am 04.07.2012
Super Script, einfach zu verstehen und tut genau das was ich suchte.

Danke!