phpbar.de logo

Mailinglisten-Archive

[php] Nicht gleichverteiltes array_rand()

[php] Nicht gleichverteiltes array_rand()

Jens Maukisch j.maukisch_(at)_designforweb.de
Sun, 12 Nov 2000 22:53:17 +0100


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