(Stand: 23.12.24, Adresse: http://www.grammiweb.de/php/php016.shtml)
Zufällige Ausgaben mit Gewichtung
Was tun, wenn man gerade eine Bannerrotation in PHP erstellt und dabei die Möglichkeit einräumen will, ausgesuchte Banner öfter einzublenden als den Rest? Ganz einfach: Man gibt den einzelnen Elementen der Rotation ein Gewicht, mit dem die Häufigkeit der Anzeige gesteuert wird.
Dazu werden die Elemente erst einmal in einem Array abgelegt (im Beispielscript ist
dies "$elemente
"). Dann wird ein zweites Array angelegt, in dem die Gewichtung
vorgegeben wird ("$gewichtung
"). Im Beispiel würde dies bedeuten,
dass das erste Element des Array $elemente
etwa viermal so häufig angezeigt
werden soll wie das zweite Element.
Anschließend wird ein neues Array angelegt ("$elemente_gewichtet
"),
welches entsprechend der Summe der einzelnen Gewichtungen (im Beispiel ergibt dies 10)
mittels einer Schleife mit den jeweiligen Elementen "gefüllt" wird. Vom
Beispielscript ausgehend würde dies also bedeuten, dass das neue Array viermal mit "Element 1",
einmal mit "Element 2", zweimal mit "Element 3" und dreimal mit "Element 4"
gefüllt wird.
Zu guter Letzt wird dann eine Zufallsauswahl basierend auf dem Array "$elemente_gewichtet
"
erzeugt, die entsprechend der Gewichtung eine viermal so hohe Wahrscheinlichkeit hat, auf
"Element 1" zu treffen, wie auf "Element 2".
<?php
$elemente = array("Element 1","Element 2","Element 3","Element 4");
$gewichtung = array("4","1","2","3");
for($i=0; $i<count($gewichtung); $i++)
{
for($x=0; $x<$gewichtung[$i]; $x++)
{
$elemente_gewichtet[] = $elemente[$i];
}
}
$anzahl = count($elemente_gewichtet)-1;
mt_srand((double) microtime() * 1000000);
$zufall = mt_rand(0,$anzahl);
echo $elemente_gewichtet[$zufall];
die();
?>
© Grammiweb.de Internetlösungen. Alle Rechte vorbehalten. Stand: 23.12.2024
Seitenanfang - Sponsor werden - Datenschutz - Medien - Impressum - Werbung - Hilfe - Kontakt