Array gibt alles aus trotz rand()

aTa

Erfahrenes Mitglied
Hallo,
ich habe mehrere Werte in einem Array stehen, Pfad+Bilder.
Diese gibt er auch alle aus wenn ich jetzt aber mir rand() nur einen Wert ausgeben lassen will gibt er mir trotzdem alles aus. Versteh das nicht so ganz, ich dachte eigentlich mit rand() gibt er immer irgendeinen Wert aus dem Array aus...
Etwas Code:
PHP:
 	if ($file != "." && $file != "..")
 	{
		$urlpic = $dir[$i].'/'.$file;	  
 		
	$array = array($urlpic);
 $anzahl = count($array); 
 $zufallzahl = rand("1", $anzahl);
 $zufall = $array[$zufallzahl-1]; 

 		
 	//echo '<img src="'.$zufall.'" border="0">'; 	
   }

Danke schonmal
 
Verstehe deinen Code nicht ganz.
Das Array $array hat ja nur ein Feld und dort steht die URL zu einem Pic drin. Dann hohlst du dir von diesem array, welches nur 1 Feld hat, ein zufallsfeld, also immer das gleiche, und gibst es dann aus.

Ist das richtig. Du möchtest ein Verzeichniss auslesen und zufällig ein Bild anzeigen?

MFG
X
 
Ah jetzt wo du es sagst macht das ja echt keinen Sinn :rolleyes:
Ja genau das will ich machen bzw die Verzeichnisse liest er shcon aus und alle Bilder aus den Verzeichnissen zeigt er auch an, aber ich will halt immer nur ein Bild sehen.
 
Wie machst du es denn?
Es gibt da verschiedene Ansätze. Schlussendlich brauchst du einfach ein Array mit allen Bildern. Also kannst du so machen:

PHP:
$dir = '/blabla';
$files = scandir($dir);

oder so:

PHP:
$files = array();
$dir = '/blabla';
if ($handle = opendir($dir)) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
           $files[] = $file;
       }
   }
   closedir($handle);
}

Auf jeden fall hast du bei beiden nachher das Array $files.

Jetzt kannst du dort ein Zufallsdatei auslesen:

PHP:
mt_srand((double)microtime()*1000000); //Bruchts einfach mal. Frag mich nicht wieso ^^
$randomNumber = mt_rand(0, count($files)-1); //Generiere eine Zufallszahl zwischen 0 und der Anzahl von Elementen in $files-1. -1 Weil count bei 1 beginnt zu zählen und Array bei 0.

echo '<img src=' . $files[$randomNumber] . ' alt="random image" />'; //Gib das Bild aus.

Das ganze ist nicht getestet :)
Also so würde ich es machen. Vielleicht gibts ja viel bessere ansätze :)

MFG
X

Edit:
Bei meinem Code ists jetzt so das einfach alles aus einem Verzeichnis in $files steht. Wenn es in diesem Verzeichnis weitere Verzeicnisse hat, oder andere Dateien dann sind diese auch in $files. Musst du also noch irgendwie rausfiltern :P
 
Zuletzt bearbeitet:
So mach ich es:
PHP:
$dir = $row["dir_status"]; 
}
$dir = explode(";", $dir);
foreach($dir as $dir_list) {
  $directory[] = opendir($dir_list);
}
$i = 0;
foreach($directory as $dir_list) {
    while(($file = readdir($dir_list)) !== FALSE) {
       if(is_dir($file)) {
        $dirs[$dir[$i]][] = $file;
       } else {
        $files[$dir[$i]][] = $file;

       }

 	if ($file != "." && $file != "..")
 	{
		$urlpic = $dir[$i].'/'.$file;	  
 		
	$array = array($urlpic);
 $anzahl = count($array); 
 $zufallzahl = rand("1", $anzahl);
 $zufall = $array[$zufallzahl-1]; 

 		
 	echo '<img src="'.$zufall.'" border="0">'; 	
   }
    }
    $i++;
 
}

Das komische ist ja in $urlpic steht ja alles drin...
 
Zuletzt bearbeitet:
Sowas?

PHP:
$dir = $row["dir_status"];  
} // <-- ist der hier korrekt?

$dir = explode(";", $dir); //Nimm alle Direcories.
foreach($dir as $dir_list) {
  $directory[] = opendir($dir_list); 
} 

$i = 0; 
foreach($directory as $dir_list) {  //Loop über alle Directories.
	while(($file = readdir($dir_list)) !== FALSE) {  //Loop über alle Files/Verzeichnisse in einem Directory.
		if(is_dir($file)) { 
			$dirs[$dir[$i]][] = $file; //Array mit Verzeichnissen.
		} else { 
			$files[$dir[$i]][] = $file; //Array mit Files
		}
    }	
     
	$anzahl = count($files[$dir[$i]]); //Zähle alle Files des Verzeichnisses.
	srand((double)microtime()*1000000); //Nicht vergessen!
	$zufallzahl = rand("1", $anzahl); //Generiere eine Zufallszahl. Besser mt_rand() & mt_srand() verwenden.
	$zufall = $files[$dir[$i]][$zufallzahl-1]; //Nimm ein Files aus dem aktuellen Verzeichnis.

	echo '<img src="'.$zufall.'" border="0">'; //Zeig es an.

	$i++;
	
	//Gehe zum nächsten Verzeichnis.
}

Habe das Anzeigen des Bildes aus der while() Schlaufe genommen. Aber immernoch in der foreach(). Und das $urlpic brauchst du gar nicht. Stimmt es so?

MFG
X
 
Zurück