Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28

    Ordinare array multidimensionale

    Ciao a tutti, sto realizzando un sito che gestisce tornei di calcio e mi sono imbattuto in un problema nella pagina CLASSIFICA, vi espongo il problema:

    ho un'array multidimensionale popolato nella seguente maniera
    codice:
    <?php
    $risultatiSquadre[] = array('nome' => $nomeSquadra, 
                                'golFatti' => $golFatti, 
                                'golSubiti' => $golSubiti,
                                'vinte' => $vinte, 
                                'perse' => $perse, 
                                'giocate' => $giocate, 
                                'differenza' => $differenza, 
                                'punti' => $punti);
    ?>
    per generare la CLASSIFICA eseguo un ciclo for
    codice:
    <?php
    for($x=0;$x<count($risultatiSquadre);$x++){?>
       <div class="listClassifica">
          <div class="classificaSquadra"><?php echo $risultatiSquadre[$x]['nome']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['punti']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['giocate']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['vinte']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['perse']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['golFatti']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['golSubiti']?></div>
          <div class="classificaDati"><?php echo $risultatiSquadre[$x]['differenza']?></div>
       </div>
    <?php
    }
    ?>
    come faccio ad ordinare l'array per il parametro PUNTI?
    La perfezione srebbe riuscire ad ordinarlo per PUNTI e NOME, così da avere un risultato tipo:

    spadoria 9
    milan 6
    torino 6
    juventus 3

    e così via....


    ho provato la funzione array_multisort(), ma senza risultati, ho letto che essa agisce su colonne e non righe, ma non sono ugualmente venuto a capo del problema.

    Qualche anima pia mi illumina?
    Grazie in anticipo!

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28
    si ci ho provato ad utilizzare array_multisort(), ma probabilmente o non fa al caso mio o devo aggiustare qualcosa nello script perchè quella funzione nn mi restituisce l'array ordinato, potresti essere più specifico sul suo utilizzo?

    io ho provato in tanti modi, ne riporto 2:
    Codice PHP:
    <?php
    array_multisort
    ($risultatiSquadre[7], SORT_DESC);
    array_multisort($risultatiSquadre[7],SORT_NUMERICSORT_DESC);
    ?>
    ovviamente l'esito è stato negativo

    help!

  4. #4
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da CIGNOOOO
    si ci ho provato ad utilizzare array_multisort(), ma probabilmente o non fa al caso mio o devo aggiustare qualcosa nello script perchè quella funzione nn mi restituisce l'array ordinato, potresti essere più specifico sul suo utilizzo?

    io ho provato in tanti modi, ne riporto 2:
    Codice PHP:
    <?php
    array_multisort
    ($risultatiSquadre[7], SORT_DESC);
    array_multisort($risultatiSquadre[7],SORT_NUMERICSORT_DESC);
    ?>
    ovviamente l'esito è stato negativo

    help!
    vedi l'esempio #3 presente sul manuale che ti è stato linkato

    "Example #3 Sorting database results"

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28
    lo avevo provato, in giornata posto il codice e ti ringrazierei molto se mi dessi una mano a capire che sto sbagliando... ci sto uscendo pazzo

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    28

    SOLVED

    Bene ci sono riuscito e posto la spiegazione per chi troverà questo thread e starà sbattendo la testa come me, bisogna darsi una mano no?

    Prima di tutto un pò di teoria velocissima:
    per ordinare più array o array multidimensionali si usa la funzione array_multisort(), essa però presenta delle lacune, infatti agisce solo su colonne e non su righe di dati, cioè se avete array del tipo seguente, operate su colonne

    Codice PHP:
    <?php
    $nome
    [] = $nomeSquadra;
    $golFatti[] = $golFatti;
    $golSubiti[] = $golSubiti;
    $vinte[] = $vinte;
    $perse[] = $perse;
    $giocate $giocate;
    $differenza[] = $differenza;
    $punti[] => $punti;
    ?>
    mentre con array multidimensionali come quello che segue, operate su righe

    Codice PHP:
    <?php
    $risultatiSquadre
    [] = array('nome' => $nomeSquadra'golFatti' => $golFatti'golSubiti' => $golSubiti'vinte' => $vinte'perse' => $perse'giocate' => $giocate'differenza' => $differenza'punti' => $punti);
    ?>
    Nel primo caso potete usare la funzione array_multisort() specificando tutti gli array da riordinare secondo la priorità che desiderate, nel mio caso volevo ordinarli secondo i PUNTI e sccessivamente secondo i nomi, poichè volevo ordinare le squadre in ordine alfabetico secondo i punteggi.
    Mi spiego con due esempi pratici:

    codice:
    Classifica ordinata SOLO per PUNTI
    
    
    milan 6
    roma 3
    atalanta 3
    juventus 0
    codice:
    Classifica ordinata per PUNTI e per NOME
    
    
    milan 6
    atalanta 3
    roma 3
    juventus 0
    Nel mio caso dunque ho utilizzato la funzione in questo modo (notare che la sequenza riporta PUNTI per primo e NOME per secondo):

    Codice PHP:
    <?php
    array_multisort
    ($puntiSORT_DESC,$nome$giocate,$vinte,$perse,$perse,$golFatti,$golSubiti$differenza);
    ?>
    Se invece utilizzate un array multidimensionale dovete per forza modificarlo in più array in modo da poterlo ordinare con array_multisort().
    Io venendo a conoscenza di codesto limite di php ho deciso di abolire l'array multidimensionale e creare direttamente tanti array mentre facevo la query al db, ma se per un qualsiasi motivo voi non poteste modificare alla fonte il tipo dei dati nessuna paura, esiste un metodo per creare tanti diversi array dall'array multidimensionale e vi riporto il codice:

    Codice PHP:
    <?php 
    // genero l'array all'interno di un ciclo di lettura del db
    $risultatiSquadre[] = array('nome' => $nomeSquadra'golFatti' => $golFatti'golSubiti' => $golSubiti'vinte' => $vinte'perse' => $perse'giocate' => $giocate'differenza' => $differenza'punti' => $punti);

    // creo e popolo tanti array diversi con i dati dell'array multidimensionale
    foreach ($risultatiSquadre as $key => $value) {
        
    $nome[$key]  = $value['nome'];
        
    $golFatti[$key] = $value['golFatti'];
        
    $golSubiti[$key] = $value['golSubiti'];
        
    $vinte[$key] = $value['vinte'];
        
    $perse[$key] = $value['perse'];
        
    $giocate[$key] = $value['giocate'];
        
    $differenza[$key] = $value['differenza'];
        
    $punti[$key] = $value['punti'];
    }
    // ordino l'array per PUNTI e NOME
    array_multisort($puntiSORT_DESC,$nome$giocate,$vinte,$perse,$perse,$golFatti,$golSubiti$differenza);
    ?>
    un grazie va ad oronze che mi ha riportato sulla retta via, io avevo lasciato perdere quell'esempio perchè nn mi funzionava

    Spero di essere stato chiaro ed utile a chi verrà ciao ciao

    Alberto Cini

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.