Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Random da un array (quasi random)

    Ciao,

    ho un quesito per voi esperti programmatori:

    data una stringa o array... come pescare casualmente n valori da essa senza che questi si ripetano?

    es.

    ARRAY = (A,D,R,W,Y,T,F,C,P,U,B,M)

    Pesco 5 valori a caso non ripetuti

    RISULTATO ATTESO = R,Y,F,M,T
    RISULTATO SBAGLIATO = D,T,D,P,U (D è doppione)

    Sapete indirizzarmi?

    PS: al posto delle lettere potrei avere anche numeri ma il risultato non cambia...
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    se vuoi che non si ripetano devi per forza crearti un vettore di supporto e dalla seconda volta che estrai controllare che il nuovo valore non sia già presente.

  3. #3
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    Codice PHP:
    $arr[]=(12,23,34,47,58,69,70);
    $rnd=$arr[rand(0,sizeof($arr)-1)];
    echo(
    $rnd);

    $supp_arr[]=$rnd;

    for(
    $i=1$i<5$i++){
       
    $rnd=$arr[rand(0,sizeof($arr)-1)];
       while(
    in_array($rnd$supp_arr)){
             
    $rnd=$arr[rand(0,sizeof($arr)-1)];
       }
       echo(
    $rnd);
       
    $supp_arr[]=$rnd;

    il concetto è questo, anche se l'ho scritto di getto e potrebbe contenere errori.
    Oppure puoi sempre, una volta estratto l'elemento a random eliminarlo definitivamente dall'array con pop...

  4. #4
    Scusa la mia ignoranza... ma non ho capito come...

    potresti farmi un esempio?
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  5. #5
    Ci siamo sovrapposti nei post...

    allora... $i<5; significa che estrai 5 numeri dall'array?

    domanda: ma se l'array è piccolo (diciamo 6 numeri) e io voglio estrarre 5 numeri diversi... non si rischia che il loop sia quasi "infinito"?
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  6. #6

    Re: Random da un array (quasi random)

    Originariamente inviato da Kai Hansen

    ARRAY = (A,D,R,W,Y,T,F,C,P,U,B,M)

    Pesco 5 valori a caso non ripetuti

    RISULTATO ATTESO = R,Y,F,M,T
    RISULTATO SBAGLIATO = D,T,D,P,U (D è doppione)
    Codice PHP:
    <?php
    srand
    ((float) microtime() * 10000000);
    $input = array("A""D""R""W""Y""T""F""C""eccecc..");
    $chiavi array_rand($input5);
    for ( 
    $i 0$i 5$i++ ) {
              echo 
    $input[$chiavi[$i]] . "\n";
    }
    ?>

  7. #7
    Originariamente inviato da Lak3d
    Codice PHP:
    $arr[]=(12,23,34,47,58,69,70);
    $rnd=$arr[rand(0,sizeof($arr)-1)];
    echo(
    $rnd);

    $supp_arr[]=$rnd;

    for(
    $i=1$i<5$i++){
       
    $rnd=$arr[rand(0,sizeof($arr)-1)];
       while(
    in_array($rnd$supp_arr)){
             
    $rnd=$arr[rand(0,sizeof($arr)-1)];
       }
       echo(
    $rnd);
       
    $supp_arr[]=$rnd;

    il concetto è questo, anche se l'ho scritto di getto e potrebbe contenere errori.
    Oppure puoi sempre, una volta estratto l'elemento a random eliminarlo definitivamente dall'array con pop...
    ci sono le funzioni apposta un ti complicare la vita XD

  8. #8

    Re: Re: Random da un array (quasi random)

    Originariamente inviato da StErMi
    Codice PHP:
    <?php
    srand
    ((float) microtime() * 10000000);
    $input = array("A""D""R""W""Y""T""F""C""eccecc..");
    $chiavi array_rand($input5);
    for ( 
    $i 0$i 5$i++ ) {
              echo 
    $input[$chiavi[$i]] . "\n";
    }
    ?>
    Ciao StErMi e grazie per l'interessamento...

    allora... ".....array_rand($input, 5)" 5 è il numero degli elementi dell'array estratti (come nel mio esempio)??

    Stessa domanda anche a te: ma se l'array è piccolo (diciamo 6 numeri) e io voglio estrarre 5 numeri diversi... non si rischia che il loop sia quasi "infinito"?
    "Quando si mangia il formaggio svizzero, che succede ai buchi?" (B. Brecht)

    Visitate il mio sito:
    www.clamorosalcibali.it

  9. #9
    Ma quest'operazione la devi fare solo una volta su un elenco di numeri?

    Se è cosi allora non c'è loop infinito ^_^ anzi piu piccolo è il gruppo di elementi e piu veloce è ^_^

    ovvio che la differenza fra il tempo di impiego dello script su un gruppo di 20 elementi e uno di 30 è praticamente nulla

  10. #10
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    sicuro che array_rand con più di un elemento non possa restituire più chiavi 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.