Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569

    Random di 20 numeri diversi

    Ragazzi, mi serve un aiutino...
    Mi sono bloccato sulla creazione di una classe per una... tombola on-line.
    Ecco il codice:

    Codice PHP:
    <?
    class tombola_preparazione {
    var 
    $scheda$num_scheda$num_usciti$num_rand_human$num_rand_cpu1//...

    function tombola_preparazione(){
    $num_rand = Array(); 
    $num_rand[0] = rand(120);

    //...

    /*
    $num_rand è un array di numeri da posizionare sulla scheda della tombola.
    Non so però come fare in modo da non generare numeri uguali nei $num_rand_human[] e,
    quindi, $num_rand_cpu1[] seguenti.
    */

    //...

    /*$scheda sarà un valore variabile nelle funzioni scheda_human etc. durante la foreach()
    degli array.*/

    scheda_human($num_rand_human);
    scheda_cpu1($num_rand_cpu1);

    //...

    }

    //...

    }
    ?>
    Come fare?
    Aspetto una vostra risposta

  2. #2
    Ti sugerisco di iniziare leggendo il manuale ufficiale:

    http://www.php.net/range
    http://www.php.net/array_rand

    P.S.
    NON usare lo short open tag, utilizza sempre il tag di apertura completo.

  3. #3
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Grazie, filippo.toso, per il tuo consiglio: infatti seguo da quando ho cominciato a programmare, il manuale di php.net.
    Ho provato varie volte con rand(), situato in http://www.php.net/manual/en/function.rand.php e array_rand()... - rimane il problema "se escono numeri uguali?" - usare una if o una switch verrebbe troppo lungo il codice e, cerco di renderlo il più pulito possibile.
    Per lo short_open_tag, credo non ci sia differenza: in fondo, uso <? invece di <?php.
    Se invece avessi usato asp_tags lo avrei subito cambiato, ma davvero non so la differenza tra short_open_tag e normale.
    Comunque, ti ringrazio.

    Anche se uso array_rand(), viene sempre il problema della rand() normale, di generare 2 numeri uguali!!

    Cosa potrei fare?
    Attendo risposte

  4. #4
    A parte la considerazione sullo short tag che e' dato come deprecato da quando sono comparsi i file <?xml .... puoi fare come ti pare, prima o poi dovrai correggere i tuoi file.

    Per quanto riguarda l'estrazione di 20 numeri (penso sui 90 del lotto) basta caricarli tutti su un array e poi eseguire un suffle e poi estrarre i primi 20 dell'array.

    Un banalissimo esempio:

    Codice PHP:
    <?php

    $numeri 
    range(190);
    $y 5;  // numero delle combinazioni da estrarre

    for($i 0$i $y$i++) {
        
    shuffle($numeri);
        
    $primi20 array_slice($numeri020);

        foreach(
    $primi20 as $value) {
              echo 
    $value" ";
             }
        echo 
    "
    "
    ;
    }
    ?>

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Era la stessa soluzione che ho trovato poco fa, ho provato a postarla ma mi ha dato errore.
    Grazie di tutto. La discussione è chiusa.

  6. #6
    Mi chiedo perchè non usare le funzioni suggerite ...

    Codice PHP:
    <pre>
    <?php 
    $numbers 
    range(190);
    $keys array_rand($numbers20);
    foreach (
    $keys as $key) {
        print(
    "{$numbers[$key]}\r\n");
    }
    ?>
    </pre>

  7. #7
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Beh, veramente, ho provato anche con quello, ma mi ha restituito valori uguali.
    Per questo, potrei fare il tuo metodo, facendo l'unset dei valori già usciti, ma array_rand
    darà errore poiché gli abbiamo detto di restituirne 20 e, con l'unset diventano 19.
    Per questo, è migliore il metodo di piero.mac, nel mio caso.
    Provando con rand, invece, si rischia di avere numeri uguali.
    Per questo, ho modificato un po' il codice di piero.mac per le mie funzioni...

    Codice PHP:
    <?php
    function tombola_preparazione(){//Dichiaro la funzione tombola_preparazione. -- Chiama le funzioni che preparano le schede dei giocatori; Gli array dei numeri vengono salvati in sessioni, in modo da non crearne di nuovi --
      
    scheda_human();//Chiamo la funzione scheda_human().
      
    scheda_cpu1();//Chiamo la funzione scheda_cpu1().
      
    scheda_cpu2();//Chiamo la funzione scheda_cpu2().
    }

    function 
    scheda_human(){//Dichiaro la funzione scheda_human(). -- Prepara una scheda 5x4 per il giocatore umano --
      
    $numeri range(190);//Ottengo i 90 numeri della tombola e li ordino nell'array $numeri.
      
    shuffle($numeri);//Mischio i 90 numeri dell'array $numeri.  
      
    $num_human array_slice($numeri020);//Prendo i primi 20 numeri di $numeri.
      //Inizio una sessione per non perdere i dati.
      
    session_start();
      
      
    $_SESSION['1human'] = $num_human[0];
      
    $_SESSION['2human'] = $num_human[1];
      
    $_SESSION['3human'] = $num_human[2];
      
    $_SESSION['4human'] = $num_human[3];
      
    $_SESSION['5human'] = $num_human[4];
      
    $_SESSION['6human'] = $num_human[5];
      
    $_SESSION['7human'] = $num_human[6];
      
    $_SESSION['8human'] = $num_human[7];

    //...

    ?>
    Poi, se necessario, il tuo metodo è buono per un altro mio progetto.
    Si chiamerà ClubSociety, un social network dove ho pensato di metterci anche la tombola.
    Per ora il progetto è ancora all'inizio, ma come dice il proverbio....

    Chi ben incomincia, è a metà dell'opera!

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.