3 Zufallsbilder
Samstag, 22 August 2009
Um Besuchern eine Bildergalerie schmackhaft zu machen, kann man vorab einige Vorschaubilder anzeigen lassen. Sind es immer die gleichen Bilder, verpufft der Effekt. Also sorgen wir für Abwechselung bei der Anzeige.
<?php
$anz_img=40;
$a = rand(1,$anz_img);
?>
Die Gesamtanzahl Bilder unser Galerie ist bekannt, hier sind es 40. Mit der Funktion rand() lassen wir uns eine Zufallszahl zwischen 1 und der Gesamtanzahl Bilder ermitteln. Das erste Zufallsbild steht fest. Um uns die Arbeit zu erleichtern, sind die Bilder der Galerie durchnummeriert und tragen dieselbe Dateiendung. Beginnend bei 1.jpg bis zum letzten Bild, 40.jpg.
Jetzt kommt die Schwierigkeit. Das nächste Foto, die nächste Zufallszahl darf nicht gleich der bereits ermittelten Zufallszahl sein, sehr unschön, 2 gleiche Fotos nebeneinander anzuzeigen. Aber es gibt ja while() mit break.
<?php
$anz_img=40;
$a = rand(1,$anz_img);
$b = rand(1,$anz_img);
while($b == $a){$b = rand(1,$anz_img); if ($b!=$a) break;}
?>
In $b speichern wir eine zweite Zufallszahl. Solange die Behauptung $b==$a wahr ist, wird die While-Schleife durchlaufen. Mit andern Worten, solange die zweite Zufallszahl gleich der ersten Zufallszahl ist, wird die Anweisung innerhalb der Schleife ausgeführt. Und was steht in der Schleife? Klar, die Ermittlung einer neuer Zufallszahl für $b. Irgendwann wird $a ungleich $b, beide Zahlen sind unterschiedlich, das wollten wir ja. Und ist das der Fall, brechen wir mit break die While-Schleife ab.
<img src="<?php echo $a; ?>.jpg">
<img src="<?php echo $b; ?>.jpg">
Resultat: 2 unterschiedliche Zufallsbilder unserer Galerie werden angezeigt. Und bei jedem neuen Laden, jedem neuen Besuch der Webseite werden 2 neue Fotos angezeigt. Gut, wir wollten aber 3.
Die große Schwierigkeit dabei haben wir schon gelöst. Für das dritte Foto müssen wir nur das berücksichtigen, was wir schon beim 2. Zufallsfoto getan haben. Die Schleife wird größer und die Bedingung für das breaken der Schleife auch. Nun darf die 3. Zahl weder in $a noch in $b ermittelt worden sein.
<?php
$anz_img=40;
$a = rand(1,$anz_img);
$b = rand(1,$anz_img);
while($b == $a){$b = rand(1,$anz_img); if ($b!=$a) break;}
$c = rand(1,$anz_img);
while ($c == $a OR $c == $b){$c = rand(1,$anz_img); if ($c!=$a && $c!=$b) break;}
?>
$c darf nicht $a und darf nicht $b sein, solange bleiben wir in der Schleife. Die macht nichts anderes wie vorher auch, es wird wieder eine neue Zahl $c ermittelt. Sind die Bedingungen $c ungleich $a und $c ungleich $b erfüllt, brechen wir mit break ab. 3 Zufallszahlen, 3 Zufallsbilder. Voila.
This is a nested column
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
This is another nested column
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.