Zufallsgenerator
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
array
bestimmen
bild
break
code
ende
file
gewissen situation
image
konfiguration
maximalen wert angeben
nachfolgendem beispiel
normales bild
ordner
rand
schnellste methode
umgehen
verzeichnis
vorhaben
-
Hallo Leute,
ich bräuchte eine Idee für einen Zufallsgenerator auf meiner Seite, und zwar soll ein Bild auf einer gewissen Situation, bei jedem mal aufrufen ein anderes sein, nicht immer das selbe...
Danke -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
switch(mt_rand(1, 3)) { case 1: $pic = 'Bild1.png'; break; case 2: $pic = 'Bild2.png'; break; case 3: $pic = 'Bild3.png'; break; }
-
Ich würde alle Bilder, die zufällig angezeit werden sollen, in einem Ordner ablegen. Den Inhalt des Ordners liest du mit scandir() in ein array. Über rand() oder besser noch mt_rand() lässt du eine "zufällige" Zahl bestimmen, wobei du 0 als minimal Wert und sizeof(array-1) als maximalen Wert angeben solltest. Das ausgewählte Element kannst du dann anzeigen lassen über array[$rand].
ungetesteter code dazu:
<? $handle='/path/to/files'; $array=scandir($handle); $rand=rand(0,sizeof($array)-1); echo $array[$rand]; ?>
-
Wenn du beispielsweise bei jedem Seitenaufruf ein anderes Bild anzeigen lassen möchtest, kannst du dir eine Datei namens "rotate.php" ersteööen (Beispiel) und wie folgt füllen:
<?php $files = glob('images/{*.png,,*.jpg,*.gif}', GLOB_BRACE); readfile($files[array_rand($files)]); ?>
Dies kannst du dann wie ein normales Bild einbinden:
<img src="rotate.php">
Im o.g. PHP-Code wird ein zufälliges Bild aus dem Verzeichnis "images" mit der Dateiendung png, jpg und/oder gif genommen und angezeigt.
Die PHP-Funktion glob ist relativ mächtig und kann auch beispielsweise mit Wildcards arbeiten. In nachfolgendem Beispiel wird der o.g. PHP-Code etwas erweitert und vereinfacht:
<?php // Konfiguration $folder = 'images'; // Verzeichnis mit den Bildern $allowed = array('jp*g', 'png', 'gif'); // Erlaubte Dateiendungen (jp(e)g, png, gif, ...) // Konfiguration Ende // Hauptscript $exts = array(); $ssfolder = stripslashes($folder); foreach($allowed as $ext) { $exts[] = '*.'.$ext; } $exts = implode(",", $exts); $files = glob($ssfolder.'/{'.$exts.'}', GLOB_BRACE); readfile($files[array_rand($files)]); // Hauptscript Ende ?>
Hier kannst du nun problemlos die Dateiendungen und den Ordner nach Belieben anpassen. Man könnte es auch ein wenig umschreiben/verändern, dass beispielsweise nur Bilder mit den Namen xyz**** aus dem Ordner ausgelesen werden, usw.
Jetzt wiederrum haben wir das selten dämliche Problem, dass das Ganze case sensitive ist d.h. hier muss groß und Kleinschreibung beachtet werden. Das kann man mit einem Trick umgehen:
$allowed = array('[jJ][pP]*[gG]', '[pP][nN][gG]', '[gG][iI][fF]'); // Erlaubte Dateiendungen (jp(e)g, png, gif, ...)
Alles in Allem dürfte glob die mitunter schnellste Methode sein, dein Vorhaben umzusetzen. Viel Spaß damit =)
EDIT:
Wenn du aus irgendwelchen Gründen das Ganze nicht mittels readfile machen willst, sondern vielleicht per Include, kannst du
readfile($files[array_rand($files)]);
mit
echo '<img src="'.$files[array_rand($files)].'">';
ersetzen. Dadurch wird dann halt direkt on-the-fly der IMG-Tag generiert und das Bild dort angezeigt.
Beitrag zuletzt geändert: 28.5.2011 16:26:27 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage