Mailinglisten-Archive |
Hallo ! > Zum Beispiel: gegeben 3 Elemente, mit Gewichtungen 1, 2 und 3: > > "a" -> 1 > "b" -> 2 > "c" -> 3 > > Nun möchte ich, daß "a" mit der Wahrscheinlichkeit 1/6, "b" mit 2/6 > und "c" mit 3/6 ausgewählt werden. > > Gibt es dafür irgendein genialer Ansatz, der ohne Datenbank auskommt? Generier doch einfach eine Zufallszahl (die ist ja glaube ich 0<= zufallszahl<=1, wenn nicht kann man die ja noch nen bisschen dividieren) und schau einfach ob der weri der dabei rauskommt kleiner als 1/6, 2/6 oder 3/6 ist und füg einfach noch nen wert in den array ein, also ungefähr so: $zufallszahl = rand(); // man musst das aber irgendwie vorher initialisiern if(zufallszahl<="1/6") {$array[]="a";} if(zufallszahl<="2/6") {$array[]="b";} if(zufallszahl<="3/6") {$array[]="c";} so, die daten welcher wert bei welcher wahrscheinlichkeit zugewiesen werden soll, kann man sich ja wenn man bedarf hat aus einer datenbank (was du ja nicht wolltest) oder aus einer Datei die nach folgendem muster aufgebaut ist ziehen a;1/6 b;2/6 c;3/6 Dann liest du die datei schön ein und explodest die dann a=explode(";", $datenausdatei) dan müsste man die if-geschichte ein wenig loopen und dann funzt das, müsste ungefähr so aussehen: <nichtgetesteter code> <?php $zzahl = rand(); // Zufallszahl generieren $fp = fopen("datei.txt","r"); // Datei mit den Bedingungen öffnen while(feof($fp)==0): // alle Daten aus der Datei lesen (in einen Array) $honk[]=chop(fgets($fp,100)); endwhile; foreach($honk as $myhonk) { // Array nach Bereich und Wert splitten $tempwert=explode(";"$myhonk) $wert=$tempwert[0]; $bereich=$tempwert[1]; } $count = "0"; foreach($wert as $zaehlen) { // schauen welcher wert nun in den array geschrieben wird if ($bereich[$count]<=$zzahl) { $myarray[]=$wert[$count]; breake; } } ?> </nichtgetesteter code> ich hoffe ich hab dein problem verstanden und konnte dir ein wenig weiterhelfen, ob das nun funzt weiß ich nicht so genau, mal schaun. mfg jens
php::bar PHP Wiki - Listenarchive