Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    problema random oggetti

    Buongiorno, sto cercando di costruire un random di x immagini, riscontro però due problemi:

    1) il più importante, alcune volte mi esce due volte lo stesso oggetto
    2) lo posto dopo nel caso non trovo la soluzione.

    Grazie

    qui di seguito il codice
    <?php
    $finished = false;
    $dimimg = 0;
    $limitimg = 916;
    $lastogg = "";
    while ( ! $finished ):

    //estraggo oggetti random
    $sql_ogg = mysql_query("select * from rm_random2 where oggetto != '$lastogg' order by RAND() limit 1");
    $val_ogg = mysql_fetch_array($sql_ogg);
    $size = getimagesize("images/foto_oggetti/oggetti/$val_ogg[oggetto]");
    $dimimg += $size[0];
    $lastogg = $val_ogg[oggetto];
    if ($dimimg >= $limitimg):
    $finished = true;
    else:
    ?>
    immagineeeee
    <?php
    endif;
    endwhile;
    ?>

  2. #2
    Così dovresti evitare elementi doppi
    Codice PHP:
    <?php
    $finished 
    false;
    $dimimg 0;
    $limitimg 916
    $lastogg = array(); 
    while ( ! 
    $finished ): 

    //estraggo oggetti random
    $sql_ogg mysql_query("select * from rm_random2 where oggetto NOT IN ('".implode("','",$lastogg)."') order by RAND() limit 1");
    $val_ogg mysql_fetch_array($sql_ogg);
    $size getimagesize("images/foto_oggetti/oggetti/$val_ogg[oggetto]");
    $dimimg += $size[0];
    $lastogg[] = $val_ogg[oggetto];
    if (
    $dimimg >= $limitimg):
    $finished true;
    else: 
    ?>
    immagineeeee
    <?php
    endif;
    endwhile; 
    ?>
    Curiosità ...non sarebbe meglio cambiare il valore del "limit" della query e fare una query unica ciclando tra i risultati invece di effettuarne una ad ogni ciclo?
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  3. #3
    il fatto è che ho un contenitore di larghezza 916px e siccome le immagini che estraggo sono tutte di dimensioni diverse, con questo codice non limito a 3 o 4 immagini ma potrebbero essere solo 2 se grandi o 5 se piccole. Non so se giocando sul limit si può fare lo stesso.

    Grazie

  4. #4
    Se tra i tuoi dati hai a disposizione la dimensione minima delle foto, imposti il limiti basandoti su quella... ovvero limiti al numero massimo di immagini che potrebbero starci se fossero tutte di quella dimensione.
    Lasci i controlli sulle dimensioni e modifichi il while.

    Codice PHP:
    <?php

    $dimimg 
    0;
    $limitimg 916
    $maxfoto ceil($limitimg/$dim_minima);

    $sql_ogg mysql_query("select * from rm_random2 order by RAND() limit ".$maxfoto);


    while (
    $val_ogg mysql_fetch_array($sql_ogg) && $dimimg $limitimg): 

    $size getimagesize("images/foto_oggetti/oggetti/$val_ogg[oggetto]");
    $dimimg += $size[0];
    // eventuali operazioni sull'immagine

    endwhile; 

    ?>

    immagineeeee
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  5. #5
    ottima soluzione...grazie...posso approfittare delle tue ottime conoscenze di php per un'altra cosa. Questo sistema ha un inconveniente, se con il random mi tira fuori 1 img media e 1 grande la cui somma supera i 916px mi visualizza solo 1 foto e risulta brutto, come potrei fare in questo caso a fare in modo che se la seconda foto estratta è grande a sostituirla con una più piccola? l'obbiettivo alla fine è che vengano sempre visualizzate almeno 2 foto e mai 1 sola.

  6. #6
    Ti conviene memorizzare le dimensioni nel db insieme agli altri dati della foto.
    Se dopo il primo ciclo viene presa una sola foto, calcoli lo spazio rimasto e fai una seconda query per cercarne un'altra che riempia:
    codice:
    select * from rm_random2 where larghezza<=spazio_rimasto and id!=id_foto_ciclo_precedente order by RAND() limit 1
    Questa è solo una possibile soluzione e di certo non la migliore.
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.