Formulare ganz einfach erstellen

Onlineformulare mit wenigen Mausklicks einfach und bequem selbst gemacht

Hier klicken und mehr erfahren

Neu: Inspirationen für Webdesigner

Entdecken Sie die schönsten Seiten im Netz

Hier klicken und mehr erfahren

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();
?>


Zurück zum Inhaltsverzeichnis

© Grammiweb.de Internetlösungen. Alle Rechte vorbehalten. Stand: 21.01.2018
Seitenanfang - Sponsor werden - Datenschutz - Medien - Impressum - Werbung - Hilfe - Kontakt