PHP-Klasse zur Generation von Zufallszahlen aus Bereichen
Habe eben eine kleine PHP-Klasse zur Generation von Zufallszahlen basierend auf angegebenen Zahlenbereichen geschrieben. Wozu man das braucht?
Nun jeder kennt den PHP-Zufallsgenerator, mit dem man z. B. ganz einfach eine Zahl zwischen 1 und 100 generieren kann:
1<?php
2
3echo(rand(1,100));
4
5?>
Doch was ist wenn ich eine Zahl zwischen 1 und 100, 200 und 300 oder 400 und 500 generieren will? Falsch wäre die Verwendung des PHP-Zufallsgenerators mittels:
1rand(1, 500);
Warum? Ganz einfach, der Generator denkt sich eine Zahl zwischen 1 und 500 aus - und das kann z. B. auch 259 sein - und die sollte es mit oben genannter Aufgabenstellung ja nicht geben. Genau hier setzt meine Klasse an - mittels Konstruktor werden die erwünschten Ranges angegeben und aus diesen wird dann eine Zufallszahl generiert und übergeben. Also beispielsweise für die oben genannte Aufgabenstellung:
1$bla = new rangeRandom("1-100", "200-300", "400-500");
2 echo($bla->getRandom());
Genug der Worte - hier der Quellcode: http://www.spongedpaste.com/index.php?l=f9a325eeb5
1class rangeRandomMit /* Klasse zur Berechnung von Zufallszahlen aus mehreren Bereichen */ {
2
3//Deklarationen var $ranges=array();
4
5function rangeRandom($var) /* Konstruktor */ { for($i=0;$i<func_num_args($var);$i++) /* Erstellen eines Arrays mit als Parameter uebergebenen Bereiche */ { $this->ranges[$i]=func_get_arg($i); } }
6
7function returnArray() /* Array zurueckgeben */ { return $this->ranges; }
8
9function getRandom() /* Eine Zufallszahl aus den definieren Bereichen uebergeben */ {
10
11//Eine zufaellige Bereichs-ID beziehen $tempRange = rand(0, (sizeof($this->ranges)-1));
12
13//Eine Zufallszahl aus dem Bereich beziehen $vorkommenMinus = stripos($this->ranges[$tempRange], '-');
14
15//Rahmenwerte definieren $rangeA = substr($this->ranges[$tempRange], 0, $vorkommenMinus); $rangeB = substr($this->ranges[$tempRange], $vorkommenMinus+1, strlen($this->ranges[$tempRange])-$vorkommenMinus);
16
17//Debug-Ausgaben --> testing //echo("In ".$this->ranges[$tempRange]." kommt - an ".$vorkommenMinus.".Stelle vor.<br />Range ==> ".$rangeA." - ".$rangeB."<br />");
18
19//Zufallszahl uebergeben return(rand($rangeA, $rangeB));
20
21}
22
23}
24
25?>