[an error occurred while processing this directive]

Programme von Machern für Macher

Die Grammiweb-Produktreihe hält viele praktische Tools für Webdesigner bereit

Hier klicken und mehr erfahren

Schnelle Seiten gefällig?

Befreien Sie Ihre Webseiten mit wenigen Mausklicks von unnötigem Balast

Hier klicken und mehr erfahren

[an error occurred while processing this directive]

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


Zurück zum Inhaltsverzeichnis

[an error occurred while processing this directive] [an error occurred while processing this directive]

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