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

    classifica poker in php?

    Buona sera a tutti... ho deciso di fare una classifica di poker con gli amici.

    Questo è l'array:

    codice:
    $risultati= array(
    
        0 => array(5, 11, 11=>"Nomegiocatore1"),
        1 => array(6, 6, 11=>"Nomegiocatore2"),
        2 => array(8, 0, 11=>"Nomegiocatore3"),
        3 => array(2, 15, 11=>"Nomegiocatore4"),
        4 => array(15, 0, 11=>"Nomegiocatore5"),
        5 => array(11, 8, 11=>"Nomegiocatore6"),
        6 => array(4, 4, 11=>"Nomegiocatore7"),
        7 => array(3, 5, 11=>"Nomegiocatore8"),
        8 => array(0, 3, 11=>"Nomegiocatore9"),
    
    );
    Ho assegnato all'undicesimo posto il nome del giocatore perchè è un torneo da 10 giorni quindi l'undicesima posizione non serve per lo script...

    e qui posto la creazione della tabella:

    codice:
    
    echo"<p class='title'>CLASSIFICA</p>";
    
    echo"<table>";
    
    // - PRIMA RIGA
    
    echo"
    <tr class='primariga'>
      <td>Posizione</td>
      <td>Giocatore</td>
      <td colspan='10'>Punti</td><td>Totale</td>
    </tr>";
    
    for($a=0; $a<count($risultati); $a++){
      
    echo"
    <tr class='contenuto'>
      <td>";echo $a+1; echo"</td>
      <td class='nome'>".$risultati[$a][11]."</td>";
    
          for ($i=0; $i<10; $i++){
               echo" <td class='punti'> "; 
                    if (is_null($risultati[$a][$i])){echo"-";} else {echo $risultati[$a][$i];} 
               echo"</td>";
          }
          
    echo"<td class='totale'>";
        echo array_sum($risultati[$a]);
    echo"</td></tr>";
    }
    
    echo"</table>";
    dovrei ordinare l'array madre secondo i risultati di ogni array figlio.. qualche suggerimento?

    la classifica la trovate qui, se dovesse servire: http://orarilegapoker.altervista.org .

    attendo risposte fiducioso

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Mah... dovresti spiegare cosa sono i valori dentro il tuo array esattamente, eventualmente guarda anche array_multisort

  3. #3
    i valori dentro l'array sono i punti della giornata.

    array_multisort a quanto ho capito NON me li ordina secondo la somma dei valori che ha l'array (se sbaglio ditemelo). Io devo ordinare in ordine decrescente gli array figli in base alla somma dei valori, non ordinare i valori contenuti in essi.

    Ho provato a creare un ciclo for che mi somma i valori dell'array, e in seguito me li mette alla posizione "0" di ciascun array, dunque ho riordinato con rsort, ma me li ordina secondo UN valore (il primo).

    Allora ho cambiato e ho sostituito la posizione 0 con la posizione 1. in questo caso rsort fa il suo lavoro, ma mi viene mangiato (logicamente) il primo punto della giornata perchè stava alla posizione 1.

    Qui allora mi è venuto in mente: "bene, basta mettere il primo punto alla seconda posizione e il secondo punto alla terza posizione dell'array". e per magia torna tutto da capo...

    adesso ho modificato manualmente la posizione degli array.. però non mi va di fare tutte le volte sta cosa, meglio se lo faccia automaticamente...


    Help

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    non ho capito perchè in ogni elemento ci sono tre valori, di cui il terzo è "11=>...")...

    detto questo puoi semplicemente sviluppare l'algoritmo che descrivi, p.es.:

    (pseudocodice)

    inizio ciclo nel vettore
    sommo i valori dell'elemento corrente
    metto la somma in un vettore di appoggio lasciando come associazione l'indice
    fine ciclo nel vettore
    riordino il vettore di appoggio


    In questo modo hai un vettore di appoggio con l'ordinamento degli indici in base alle somme.

    Se vuoi del codice spiegami meglio ogni elemento cosa rappresenta (vedi oss.ne iniziale)

  5. #5
    Grazie eiyen delle risposte..

    in ogni caso l'ho detto prima, sono i punti della giornata, e la posizione 11 dell'array serve per il nome del giocatore perchè quando vado a scrivere la tabella tramite ciclo for, faccio riferimento alla posizione 11 per andarlo a scrivere nella tabella sotto la colonna dei nomi..

    codice:
    codice:
    ..ciclo for
    
    <td class='nome'>".$risultati[$a][11]."</td>"
    
    fine ciclo for..
    questi sono i punteggi:

    codice:
     * 1° => 15 punti
     * 2° => 11 punti
     * 3° => 8 punti
     * 4° => 6 punti
     * 5° => 5 punti
     * 6° => 4 punti
     * 7° => 3 punti
     * 8° => 2 punti
     * 9° => 1 punti
     *  SE NON PARTECIPA => 0 punti
    ogni domenica aggiorno la classifica mettendo nell'array i punti che guadagna ciascun giocatore.

    ad esempio:
    codice:
    $risultati = array(
      0 => array(5, 11, 11=>"Michael Mammoliti"),
      1 => array(0, 12, 11=>"Silvio Berlusconi")
    );
    domenica prossima diventa:
    codice:
    $risultati = array(
      0 => array(5, 11, 2, 11=>"Michael Mammoliti"),
      1 => array(0, 12, 8, 11=>"Silvio Berlusconi")
    );
    per sommare i valori dell'array ho creato un nuovo ciclo for così:
    codice:
    //siamo 9 giocatori.
    for ($h=0;$h<9;$h++){
      
          $risultati[$h][12] = array_sum($risultati[$h]);
          
    }
    dove il valore della posizione 12 va scritto sotto la colonna "Totale" della tabella..

    ho usato la posizione 11 per il nome e 12 per il totale dei punti perchè ho solo bisogno di 10 spazi dato che è un torneto da 10 partite.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Ah, ho capito, forse... senti: ma cambiare il vettore non potresti? Sarebbe meglio un vettore tipo:

    $giornate = (
    'nome1 cognome1' => array(5, 7, 9, ...),
    'nome2 cognome2' => array(5, 7, 9, ...),
    ...
    );

    Ogni elemento è un sottovettore con chiave=nome giocatore e valore un array con l'elenco dei punteggi.

    Per inserire i punteggi della giornata n-esima di 'nome1 cognome1':
    $giornate['nome1 cognome1'][$n-1] = 7;

    In questo caso se vuoi la classifica basta:
    Codice PHP:
    foreach ($giornate as $giocatore => $punteggi) {
      
    $punti array_sum($punteggi);
      
    $classifica[$giocatore] = $punti;
    };
    asort($classifica); 

  7. #7
    Evvai. ci sono riuscito con un mio metodo

    codice:
    //ARRAY
    $punti = array(
        
        //CARLO
        1 => array(0=> 0, 0, 11, 11=>"Carlo Pellitteri"),
        
        //MICHAEL
        2 => array(0=> 0, 6, 6, 11=>"Michael Mammoliti"),
        
        //LUCA
        3 => array(0=> 0, 8, 0, 11=>"Luca Porliod"),
        
        //ANTONIO
        4 => array(0=> 0, 2, 15, 11=>"Antonio Pisacane"),
        
        //ERIKA
        5 => array(0=> 0, 15, 0, 11=>"Erika Costante"),
        
        //MARCO
        6 => array(0=> 0, 11, 8, 11=>"Marco Voyat"),
        
        //FEDERICO
        7 => array(0=> 0, 4, 4, 11=>"Federico Furfaro"),
        
        //VALENTINA
        8 => array(0=> 0, 3, 8, 11=>"Valentina Rizzotto"),
        
        //BENNY
        9 => array(0=> 0, 0, 3, 11=>"Marco Bennardo")
        
    );
    
    
    //CREO CICLO CHE MI SOMMA CIASCUN VALORE DELL'ARRAY FIGLIO E MI SOSTITUISCE IL PRIMO VALORE (la posizione 0) CON LA SOMMA DI ESSI.
    for ($h=0;$h<9;$h++){
          $punti[$h][0] = array_sum($punti[$h]);
    }
    
    //ORDINO L'ARRAY SECONDO LA POSIZIONE 0 (la somma dei suoi valori)
    rsort($punti);
    
    //CREO LA PRIMA RIGA CON LE CATEGORIE
    echo"
        <table>
          <tr>
            <td class='position'>Posizione</td>
            <td class='name'>Giocatore</td>
            <td colspan='10'>Punti</td>
            <td class='tot'>Totale</td>
          </tr>";
    
    
    // CREO CICLO PER LA CREAZIONE DELLE RIGHE
    for ($giocatori=0; $giocatori<9; $giocatori++){
    echo "<tr>";
    
    // SCRIVO IN ORDINE CRESCENTE LE POSIZIONI DELLA CLASSIFICA (+1 perchè l'array parte da 0)
    echo"<td>"; echo $giocatori+1; echo"</td>";
    
    //SCRIVO I NOMI DEI GIOCATORI
    echo"<td>".$punti[$giocatori][11]."</td>";
     
    //CICLO PER I PUNTI
    for ($giornate=1; $giornate<=10; $giornate++){
    
    //SE TROVO UNA POSIZIONE VUOTA SCRIVO "-" ALTRIMENTI SCRIVO IL VALORE
    echo"<td>"; if (is_null($punti[$giocatori][$giornate])){echo"-";} else {echo $punti[$giocatori][$giornate];} 
    
    echo"</td>";
    }
            
    //SCRIVO IL TOTALE (la posizione 0 dell'array)
    echo"<td>".$punti[$giocatori][0]."</td>";
      
    echo"</tr>";
    }
    
    //CHIUDO LA TABELLA
    echo"</table>";

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 © 2024 vBulletin Solutions, Inc. All rights reserved.