.
hi, leute,
ich möchte auf einer seite drei verschiedene bilder zufällig aus einem verzeichnis aufrufen lassen. es soll aber kein bild zwei-/dreimal angezeigt werden.
ich hab ein brett vorm kopf und komm net ganz weiter
so weit bin ich:
danke für eure hilfePHP-Code:$verz = opendir ('blabla');
$i = "0";
while ($file = readdir ($verz)) {
if (!is_dir($file)) {
$i++;
}
}
closedir($verz);
$bild1 = rand(1,$i);
$bild2 = rand(1,$i);
// in diesem fall kann bild2 schon dasselbe sein wie bild1
.
Geändert von Radoo.de (16.10.2003 um 03:56 Uhr)
öm. ohne ins philosophische abschweifen zu wollen:
bilder in ein array lesen,
dann in einer schleife die als abbruchkriterium deine max angezeigten Bilder beinhalten soll...
array zählen,
randomizen
bild aus array mit der random-nummer holen
die array-zelle löschen.
also
PHP-Code:while($i < $anzahl)
{
$num = count(bildarray);
(den seed vorher - hab den befehl grad net zur hand)
$randnr = rand(1,$num);
tuwas mit... $bild[$randnr];
unset($bild[$randnr];
$i++;
}
@LF: ohne ins rechthaberische abweichen zu wollen:
Er möchte ein Zufallsbild, nicht alle Bilder in zufälliger Reihenfolge...
EDITARRGGH! Vergiss es. Falsch gelesen...
[edit2]Wäre nicht $randnr=-1;while( ! bild[randnr] ) $randnr = rand(1,$num); besser?[/edit2]
Geändert von webmichl (03.07.2003 um 17:02 Uhr)
Gruß, der Michl
* * * if you want them to RTFM, make a better FM! * * *
deine lösung versteh ich jetzt aber net...
tu - solang es das bild mit der zufälligen nummer nicht gibt - eine neue nummer generieren?
verhindert ja wieder nicht, dass zufällig ein bild doppelt angezeigt wird. oder gehört da noch mehr dazu?
Sollte ne Ergänzung zu deinem Script sein...sorry
Das unset löscht doch den Array-Eintrag. Bei deinem Script würde zwar nix doppelt, aber evtl bei einem Bild gar nix angezeigt
Gruß, der Michl
* * * if you want them to RTFM, make a better FM! * * *
ich hatte dasselbe problem. bei wenigen bildern (bei vielen liesse die geschwindigkeit drastisch nach, es wäre zu umständlich) lässt sich ganz einfach eine schleife einrichten, die bei wiederholung einfach nochmal ein zufallsbild zieht.
mein beispiel, direkt übernommen (hab bilder mit dem namen 1 bis 27.jpg im verzeichnis). du müsstest das system dann auf deine automatisch ausgelesenen dateinamen ausweiten:
PHP-Code:<?
mt_srand((double)microtime()*1000000);
$bild1= mt_rand(1, 27);
mt_srand((double)microtime()*1000000);
$bild2= mt_rand(1, 27);
while($bild2==$bild1){
mt_srand((double)microtime()*1000000);
$bild2= mt_rand(1, 27);
}
mt_srand((double)microtime()*1000000);
$bild3= mt_rand(1, 27);
while($bild3==$bild1 || $bild3==$bild2){
mt_srand((double)microtime()*1000000);
$bild3= mt_rand(1, 27);
}
?>
ist sicherlich nicht die beste möglichkeit, aber für diesen kleinen zweck war es für mich als php-anfänger das einfachste.
tommy-p
Geändert von tommy-p (03.07.2003 um 21:37 Uhr)
Phantasie ist wichtiger als Wissen,
denn Wissen ist begrenzt.
danke für eure antworten. die idee mit dem array wars, die mich auf die richtige spur gebracht hat.
hier nun das funktionierende script:
thx nochmalsPHP-Code:$verz = opendir ('blabla');
$bildarray = array();
while ($file = readdir ($verz)) {
if (!is_dir($file)) {
array_push($bildarray, $file);
}
}
closedir($verz);
$rand_var = array_rand($bildarray, 3);
for($x = 0; $x < count($rand_var); $x++){
echo "<img src=\"blabla/$bildarray[$rand_var[$x]]\"><p>;
}
![]()
.
Geändert von Radoo.de (17.10.2003 um 21:38 Uhr)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)