Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: ciclo for e array

  1. #1

    ciclo for e array

    Ciao a tutti, sto provando uno script che da un ciclo for creo degli array che hanno il valore di un rand(1, 5) ecco il codice:

    Codice PHP:
    for($num=0;$num<5;$num++){
    $Randomize=rand(1,5);
    if(
    $Randomize==$ArrNum[$num]){
    $num--;
    }else{
    $ArrNum[$num]=$Randomize;
    }

    questo script dovrebbe fare questo un ciclo per 5 volte estrarre un numero casuale da 1 a 5 e la condizione che se il numero è stato già estrato ($Randomize==$ArrNum[$num]) il ciclo deve tornare indietr di un numero per estrarre un numero diverso altrimenti l'array ha come valore il numero casuale.

    Voi trovate qualcosa che non vada????
    Perchè non è che non funge funge ma non mi da valori differenti mi da per esempio 2 volte il numero 5 o 3 volte il numero 2 che non dovrebbe fare.

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Ti consiglierei di cambiare totalmente logica.

    Prima crei un vettore ordinato v = {1,2,3,4,5}
    Poi ripeti per 5 volte:

    alla prima iterazione seleziona un numero casuale c tra 0 e 4
    Il primo valore casuale del tuo nuovo vettore sarà v[c]
    elimina l'elemento v[c] dal vettore

    alla seconda iterazione c deve essere preso tra 0 e 3 (infatti v ha dimensione 4)
    il secondo elemento.. sarà v[c]
    elimina...

    alla quinta iterazione hai finito.

    Con il tuo metodo, invece, il numero delle iterazioni necessarie è casuale... ma sicuramente eccessivo!

    Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    ops sorry ma non o capito molto bene mi potresti fare un'esempio

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    alternativa migliore..
    crei il vettore v = {1,2,3,4,5}
    per i=0; i<4; i++
    inverti v[i] con v[rand(0,4)];

    Nota: osserva cosa accade con questo banale mescolamento:
    codice:
    i  rand     (01234)
                   12345
    0   3         42315
    1   2         43215
    2   4         43512
    3   3         43512
    4   0         23514
    Pui ripetere il ciclo di for più di una volta se ti sembra che il vettore non sia abbastanza mescolato.

    Non chiedermi codice php... però questo è chiaro, no?

    Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    si ma questo me serve per estrare dati casuali dal database

    e nonc redo che sia l'ideale almeno penso

    cè un'istruzione sql che possa farmlo fare???
    o qualcos'altro ancora???

  6. #6
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    forse dovresti cercari di spiegarti meglio...
    nel primo messaggio non c'è nessun riferimento a database.

    Prenditi un po' di tempo, ordina le idee e spiega per bene cosa devi fare al vettore e cosa ci devi fare poi.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  7. #7
    si scusami tanto e che mi sta facendo impazzire e poi ho la testa da un'altra aprte scusa.

    Io doveri prendere dal database 8 record casualmente che nond evono essere ripetitivi.

    Questo è quello che ho bisogno.

    Scusa ancora.

    Sapresti darmi an mano.

  8. #8
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    order by rand() con un limit??

  9. #9
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Sarebbe interessante sapere se la tabella del database prevede una chiave primaria numerica tipo "id".
    Poi occorrerebbe sapere se nei valori del campo "id" ci possono essere buchi oppure se la tabella contiene N record e gli id vanno da 1 a N.

    Se le cose sono come ho appena descritto, allora puoi benissimo crearti un vettore di 8 numeri scelti casualmente tra 1 e N e poi richiedere al database i record associati agli id corrispondenti ai numeri del vettore. Spero che la frase sia più incasinata del concetto..

    Se le cose non sono così, ti toccherà estrarti tutte le trighe della tabella, contarle e sceglierne 8 in modo casuale.

    Se poi il database è MySQL questo dovrebbe funzionare:

    preso da http://it2.php.net/rand
    You don't need fancy queries to grab a random row(s) from MySQL; it's actually quite simple. In fact, you can do it in a single query.

    Codice PHP:
    <?php
    $random_rows 
    = array();

    $query mysql_query("SELECT * FROM tablename ORDER BY RAND() LIMIT 1");

    while(
    $row mysql_fetch_array($query))
    {
         
    $random_rows[] = $row;
    }
    ?>
    You can extend LIMIT to any number, so you can select 10 random rows. Also, because it uses ORDER BY the rows are always unique if you select 10 rows, for example.

    This might work on other database systems such as MsSQL and PostgreSQL but I haven't tested them.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  10. #10
    abbastanza chiaro lo proverò e ti farò sapere

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.