2009-11-19 11 views

risposta

53
$imagesDir = 'images/tips/'; 

$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

$randomImage = $images[array_rand($images)]; // See comments 

È possibile inviare un secondo argomento per array_rand() di ottenere più di 1.

+4

In realtà, dovresti fare $ randomImage = $ images [array_rand ($ images)]; Dal manuale: "array_rand() restituisce la chiave per una voce casuale." – JAL

+1

grazie amico, che ha funzionato perfettamente Questo sito web è ottimo per ottenere aiuto. C'è qualche opzione che quando viene pubblicato un commento o viene data una risposta ricevo l'email perché avevo tre risposte e non ho ricevuto l'e-mail, ho spuntato la casella di notifica ma non ho ancora ricevuto l'e-mail –

+0

@ Mirror51 Visualizza il problema su meta.stackoverflow.com – alex

4
$images = glob('images/tips/*'); 
return $images[rand(0, count($images) - 1)]; 

Tuttavia, ciò non garantisce che la stessa immagine non venga selezionata due volte consecutivamente.

+4

L'aggiunta di tale assicurazione toglie la casualità. Potrebbe anche introdurre bug. – wallyk

+0

Non avevo idea che la funzione glob() esistesse. Bello. – keithjgrant

0

È possibile utilizzare opendir() per leggere i nomi file da quella directory, archiviando ciascun nome file in una matrice. Quindi utilizzare rand() con un valore minimo e massimo corrispondente ai tasti dell'array per selezionare un elemento dall'array.

-1

cartella di carico con le immagini:

$folder = opendir(images/tips/); 

tavolo costruire fuori di file/immagini da directory:

$i = 0; 
while(false !=($file = readdir($folder))){ 
if($file != "." && $file != ".."){ 
    $images[$i]= $file; 
    $i++; 
    } 
} 

pick casuale:

$random_img=rand(0,count($images)-1); 

Mostra sulla pagina:

echo '<img src="images/tips'.$images[$random_img].'" alt="" />'; 

Spero che aiuti. Ovviamente allegarlo in <?php ?>.

+1

Due problemi. Non hai bisogno di un'altra barra dopo "suggerimenti"? E perché non fare semplicemente '$ images [] = $ file' e dimenticare il contatore? – mpen

1
<?php 
    foreach (glob("gallery/*") as $filename) { 
     echo '<li><a href="'.$filename.'" title=""><img src="'.$filename.'" alt="" /></a> </li>';  
     } 
?> 

Guardate questo codice, utilizzare sicuramente se utile per voi. Carica tutti i file dalla cartella e li stampa in formato sopra. Ho creato questo codice da utilizzare con lightbox.

0

Più semplice:

$directory = "medias/photos/"; 
$img = glob($directory . "*.jpg"); 
shuffle($img); 
+2

Più semplice di cosa? – alex

+0

Il problema è, questo troverebbe solo immagini 'jpg', e fa un sacco di lavoro non necessario mischiando l'intero array (può o non può essere un problema, a seconda di quante immagini hai nella cartella). – alex

1
function get_rand_img($dir) 
{ 
    $arr = array(); 
    $list = scandir($dir); 
    foreach($list as $file) 
    { 
     if(!isset($img)) 
     { 
      $img = ''; 
     } 
     if(is_file($dir . '/' . $file)) 
     { 
      $ext = end(explode('.', $file)); 
      if($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG') 
      { 
       array_push($arr, $file); 
       $img = $file; 
      } 
     } 
    } 
    if($img != '') 
    { 
     $img = array_rand($arr); 
     $img = $arr[$img]; 
    } 
    $img = str_replace("'", "\'", $img); 
    $img = str_replace(" ", "%20", $img); 
    return $img; 
} 


echo get_rand_img('images'); 

sostituire 'immagini' con la cartella.

1

Concordato con alexa. Usa la funzione semplice.

function RandImg($dir) 
{ 
$images = glob($dir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

$randomImage = $images[array_rand($images)]; 
return $randomImage; 
} 

$the_image = RandImg('images/tips/'); 
echo $the_image; 
Problemi correlati