PHP/Tutorials/Wechsellogik

Aus SELFHTML-Wiki
< PHP‎ | Tutorials
Wechseln zu: Navigation, Suche

Wer würde heutzutage in einer Suchmaschine schon nach „Wechsellogik für Bilder“ suchen? Da fällt einem doch eher „Banner Changer“ oder „Styleswitcher“ ein. Dieses Tutorial beschreibt, wie man eine Auswahl von Bildern, Bannern, Sprüchen des Tags oder ähnlichem in zufälliger Reihenfolge anzeigt. Anders als beim Bilderkarussell und dem Komfort-Bildwechsler wird diese Auswahl serverseitig mit PHP erzeugt.[1]



Aufgabenstellung

Im Normalfall hat man eine Auswahl von Bildern in einem Verzeichnis, eine Liste mit Sprüchen des Tages im CSV oder JSON-Format, die dann in einen Array gesammelt werden, über den dann iteriert (schrittweise durchgegangen) wird. Diese feste Reihenfolge einer FiFo-Liste ist in manchen Fällen aber unerwünscht.

Bei einem Bildwechsler mit zufälliger Reihenfolge will man aber keine zufällige Wahl mit rand(), damit es nicht wie beim Würfeln zu mehreren "Sechsern" hintereinander kommen kann, sondern dass allein die Reihenfolge zufällig ist.[2]

PHP bietet mehrere Zufalls- und Mischfunktionen an:

Eine solche zufällige Reihenfolge kann durch das Mischen des Stapels mit shuffle() erreicht werden. Falls bei nur einigen Array-Elementen die Reihenfolge nach einigen Durchläufen erkennbar wird, könnte shuffle() nach jedem Durchlauf erneut ausgeführt werden.

Anwendungsbeispiel

Bilder aus Ordner finden

In diesem Beispiel wird ein Ordner nach vorhandenen Bildern durchsucht und eines davon in zufälliger Reihenfolge ausgewählt, damit beim Neuladen der Seite jeweils ein anderes Bild angezeigt wird.

Bilder aus Verzeichnis finden
$directory = 'path/to/images/';
foreach(glob($directory.'*.{gif,GIF,jpg,JPG,jpeg,JPEG,png,PNG}',GLOB_BRACE) as $file){
    $images[] =  basename($file);
}

print_r($images);

Mit der glob()-Funktion wird der Ordner nach allen Dateien mit den Endungen gif, jpg und png durchsucht. Da der RegEx case-sensitiv ist, müssen beide Varianten angegeben werden.

Die so entstandene FiFo-Liste in alphabetischer Reihenfolge wird im Array $imag gespeichert.

Mischen mit shuffle()

Dieser Array $imag muss nun gemischt werden:

Bilderliste mischen
$imagesShuffled = shuffle($images);

print_r($imagesShuffled);

Anzeigen

Bilder aus Array anzeigen
 1 <?php
 2 $imagesShuffled = [
 3     '/bilder/beispiel.png',
 4     '/bilder/test.svg',
 5     '/bilder/test.jpg'
 6 ];
 7 
 8 $index = mt_rand(0, count($werte) - 1);
 9 ?>
10 
11 Das folgende Bild wird bei jedem Laden der Seite aus einer zufälligen Reihenfolge bestimmt:<br>
12 <img src="<?= htmlspecialchars($imagesShuffled[$index]) ?>" alt="Willkommen auf unserer Seite!">

individuelle „Zufallsbilder“

Wenn Sie die Webseite von https://getcomposer.org/ aufrufen, erscheint eine PNG-Gafik eines Komponisten. Bei jedem Neuladen erscheint eine neue Grafik, bei der Kleidung, Haut und Haare jeweils andere Farben haben. Dies könnte jedoch auch über SVG und unterschiedliche Werte für die fill-Eigenschaft realisiert werden.

Quellen

  1. Dieses Tutorial ist die Neufassung eines Artikels von Benutzer:Tom. Die alte Version lagerte die Arrays in externen ini-Dateien aus und behandelte ausführlich das Laden dieser Dateien für den Changer. Sie kann über die Versionsgeschichte eingesehen werden.
  2. Selfhtml-Forum: Der Zufall mt_rand ist nicht zufällig genug vom 02.08.2016

Weblinks