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

    generatore casuale di numeri

    Devo estrarre casualmente dei numeri (degli id) da un db, allora faccio eseguire un rand(), dove imposto i valori minimi e massimi del range (controllando l'id più piccolo e l'id più alto - sono id numerici). Però ho bisogno anche di controllare nel contempo che l'id "casuale" effettivamente esista, quindi ho bisogno di rendere la funzione ricorsiva, in modo tale che se l'id casuale non esiste nel db, php ne generi un altro diverso.

    Ora, il codice in sè mi funziona (su db Mysql), ma se provo a metterlo dentro a una funzione poi non elabora. E non riesco a capire perchè: sapreste suggerirmi un possibile motivo?

    Ecco il codice:
    Codice PHP:
    $_CONFIG['host'] = "localhost";
    $_CONFIG['user'] = "***";
    $_CONFIG['pass'] = "*****************************************************";
    $_CONFIG['dbname'] = "test";

    $conn mysql_connect($_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass']) 
      or die(
    'Impossibile stabilire una connessione');
    mysql_select_db($_CONFIG['dbname']);

    function 
    random_number()
    {

    $query "SELECT MIN(id) FROM rand";
    $mysql_query mysql_query($query); #query da datbase, ricavo il primo id
    $array mysql_fetch_array($mysql_query);
    $min $array['0']; #valore minimo del range in cui estrarre il numero casuale


    $sql "SELECT MAX(id) FROM rand";
    $sql_query mysql_query($sql); #query da datbase, ricavo l'ultimo id
    $arra mysql_fetch_array($sql_query);
    $max $arra['0']; #valore massimo del range in cui estrarre il numero casuale

    $query_2 mysql_query("SELECT id FROM rand");
    $f mysql_fetch_array($query_2);

    $rand rand($min$max);

    #ancora nn mi funziona il codice prima, a questa parte ci penso dopo
    #if ( in_array($rand, $f) )
    #  {echo $rand;}
    #else 
    #  { random();}
    }

    #qua funziona
    $prova "SELECT id FROM rand";
    $query mysql_query($prova);
    while(
    $f mysql_fetch_array($query))
      {echo 
    "$f[0]\n";}

    $query "SELECT MIN(id) FROM rand";
    $mysql_query mysql_query($query); #query da datbase, ricavo il primo id
    $array mysql_fetch_array($mysql_query);
    $min $array['0']; #valore minimo del range in cui estrarre il numero casuale

    echo "min -> $min\n";

    $sql "SELECT MAX(id) FROM rand";
    $sql_query mysql_query($sql); #query da datbase, ricavo l'ultimo id
    $arra mysql_fetch_array($sql_query);
    $max $arra['0']; #valore massimo del range in cui estrarre il numero casuale

    echo "max -> $max\n";

    $query mysql_query("SELECT id FROM rand");
    $f mysql_fetch_array($query);

    $rand_0 rand($min$max);
    echo 
    "rand_0 -> $rand_0\n";


    $rand random_number();
    echo 
    "rand -> $rand\n";

    ?> 

  2. #2
    Codice PHP:
    $ids= array();
    $prova "SELECT id FROM rand"
    $query mysql_query($prova);
    while(
    $f mysql_fetch_array($query)){
        
    $ids[]= $f[0];


    shuffle($ids); 

    echo 
    $ids[0]; 
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Grazie, il codice è molto più veloce così (non conoscevo la funzione shuffle()...), ma mi rimane lo stesso problema: se lo uso per definire una funzione, non va...
    credo che sia colpa di qualche global, ma non saprei dire quale... :master:

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ma non fai prima a fare un ordinamento random sulla tabella?

    select * from tabella order by rand()

    Almeno sei sicuro che gli id esistono. Poi estrai i record che vuoi. Se te ne serve solo uno aggiungi "limit 1" alla query.

  5. #5
    questo comunque non risolve il mio problema....

  6. #6
    eh, no, il mio problema è dentro di me: se modifico il codice e poi mi dimentico di cambiare una variabile, per forza che non va....
    Grazie!

  7. #7
    cmq adesso il mio problema è un altro:
    devo poter ripetere il codice più volte, controllando però che non ci siano due valori uguali, a prescindere dal numero di passaggi
    Non so bene come fare...

  8. #8
    Codice PHP:
    function random()
      {
      
    $id = array();
      
    $query "SELECT id FROM rand";
      
    $mysql_query mysql_query($query);
      while(
    $array mysql_fetch_array($mysql_query))
        {
    $id[] = $array[0];}
      
    shuffle($id);
      return 
    $id[0];
      }

    function 
    multi_random($n)
      {
      
    $array = array();

      for (
    $i 0$i $n$i++)
        {
        
    $a random();
        
    $b control_random($a$array);
        
    $array[] = $b;
        }
      
      return 
    $array;
      }

    function 
    control_random($a$array)
      {
      if(!
    in_array($a$array))
        {
    $a $a;}
      else
        {
        
    $a random();
        
    control_random($a$array);  
        }
      return 
    $a;
      } 
    Io ho provato così, ma non funziona.... capitano comunque due numeri uguali...

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.