• User Attivo

    Immagini random senza duplicati

    Ciao a tutti,

    ho il seguente problema e non essendo esperto di php chiedo se qualcuno ha già qualche script che risolve la questione. In pratica devo visualizzare 2 immagini .jpg nella stessa pagina in maniera random da una cartella che ne contiene 3. Fin qui nulla di difficile, utilizzo lo script:

    $images = 3;
    $path = "images/";
    $random = rand(1,$images);
    echo "<img src=$path"."$random".".jpg"." border='0'>";
    $random = rand(1,$images);
    echo "<img src=$path"."$random".".jpg"." border='0'>";

    Nella realtà le immagini sono molte di più ma il concetto è sempre lo stesso, come faccio a fare in modo che un'immagine non sia ripetuta più volte? Ovvero se devo visualizzare 15 immagini su 20 presenti nella cartella facilmente una o più di esse possono essere ripetute 2 o più volte, qualcuno ha uno script già pronto che fa questa cosa in automatico?

    Grazie.


  • User Attivo

    La cosa migliore è che ti crei un array con tutti i nomi e poi ne estrai due con la funzione array_rand(): http://it2.php.net/manual/it/function.array-rand.php


  • User Attivo

    Potresti usare una combinazione di [PHP]shuffle[/PHP] e [PHP]array_pop[/PHP].

    Dichiari un array con tutti i nomi delle immagini che rimarra' costante.
    Poi copy questo array in un altro array temporaneo, lo mescoli con [PHP]shuffle[/PHP] e ne estrai (rimuovi) l'ultimo elemento con [PHP]array_pop[/PHP]. Poi ripeti queste due operazioni un numero massimo di volte pari alla lunghezza dell'array iniziale.

    Dovrebbe funzionare.


  • User Attivo

    Grazie per le risposte, alla fine la soluzione che mi sembra migliore è la seguente:

    Nel caso ho 10 immagini in nella cartella images e voglio estrarne 5 nella modalità più casuale possibile. Il nome delle immagini sarà del tipo X.jpg con X numero intero con valori da 1 a 10.

    [php]
    $input=array();

    // valorizzo un vettore con i valori da 1 a 10
    for ($count=1; $count<=10; ++$count)
    {
    $input[$count-1]=$count;
    }

    // Rendo casuale l'ordine degli elementi del vettore
    shuffle($input);

    // Estraggo 5 numero casuali
    srand((float) microtime() * 10000000);
    $chiavi = array_rand($input, 5);

    // Visualizzo le immagini associate ai numeri estratti
    echo "<img src=images/".$input[$chiavi[0]].".jpg />";
    echo "<img src=images/".$input[$chiavi[1]].".jpg />";
    echo "<img src=images/".$input[$chiavi[2]].".jpg />";
    echo "<img src=images/".$input[$chiavi[3]].".jpg />";
    echo "<img src=images/".$input[$chiavi[4]].".jpg />";
    [/php]Secondo voi la cosa è abbastanza random o ci sono delle immagini che potrebbero venire visualizzate con maggiore frequenza rispetto alle altre?

    Inoltre in questo modo ho risolto il mio problema in quanto non vi sono immagini che vengono visualizzate più di una volta.

    Ancora grazie.

    Davide


  • User

    Secondo me il tuo script va benissimo, inoltre non c'è modo che un numero compaia più degli altri (almeno teoricamente..).

    :ciauz:


  • User Attivo

    Per inizializzare l'array potevi semplicemente fare:

    $input = range(1, 10);

    Tieni anche conto che shuffle non serve (mescola già l'array_rand).