Visualizzazione risultati 1 fino 9 di 9

Discussione: Ordinare array multidimensionale

  1. #1
    cumshotevent non è connesso Neofita
    Data registrazione
    11-08-2011
    Messaggi
    9

    Question Ordinare array multidimensionale

    Io ho questo array (copia da print_r)

    Array ( [1] => Array ( [nome] => Giuseppe[pres] => 2 [goals] => 5 [amm] => 1 [esp] => 0 [mp] => 0 [md] => 2 [mf] => 0 [mg] => 1 [media] => 6.75 ) [2] => Array ( [nome] => Federico[pres] => 2 [goals] => 10 [amm] => 1 [esp] => 0 [mp] => 1 [md] => 0 [mf] => 0 [mg] => 0 [media] => 6.5 ) [3] => Array ( [nome] => Gabriele [pres] => 0 [goals] => 15 [amm] => 0 [esp] => 2 [mp] => 0 [md] => 0 [mf] => 0 [mg] => 0 [media] => 5 ) )
    Come faccio ad ordinarlo per una qualsiasi delle chiavi in modo tale l'[1] diventi quello con più goals o con meno etc etc
    Ho provato a seguire diversi esempi su internet ma nessuno ha funzionato e soprattutto nessuno capivo come funzionava.

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Tempo fa mi sono scritto questa funzione
    Codice PHP:
    function aasort(&$mixed, $key) {
    uasort ( $mixed, create_function('$a,$b', "return strcmp(\$a['$key'], \$b['$key']);") );
    }
    Che richiameresti con
    Codice PHP:
    aasort($tuoarray, 'goals');
    Il confronto però è fra stringhe ed avrebbe problemi ad ordinare correttamente dei numeri, ma non dovrebbe esserti difficile modificarla. Se usi php > 5.3.0 puoi anche sostituire la chiamata a create_function con una funzione anonima.
    Ultima modifica di dreadnaut : 22-05-2012 alle ore 20.59.45

  3. #3
    cumshotevent non è connesso Neofita
    Data registrazione
    11-08-2011
    Messaggi
    9

    Predefinito

    Non ho idea di come funzioni né di come modificarla xD sono un principiante :) ma grazie comunque dell'aiuto.

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Uhm, se sono solo numeri, direi così:
    Codice PHP:
    function aasort(&$mixed, $key) {
    uasort ( $mixed, create_function('$a,$b', "return \$a['$key'] < \$b['$key'];") );
    }

  5. #5
    cumshotevent non è connesso Neofita
    Data registrazione
    11-08-2011
    Messaggi
    9

    Predefinito

    Grazie mille! Non vorrei abusare della tua pazienza, quindi sentiti libero di non rispondermi xD ma se si volesse ordinare in maniera decrescente o addirittura fornire più parametri per ordinarli? Tipo ordinare decrescente per goals e crescente per nome... etc

    E poi ho notato che se li stami con print_r li ordina, ma l'[1] rimane sempre Giuseppe, il [2]Federico e il [3]Gabriele...in questo modo come faccio a recuperare l'ordine successivamente? (devo cioè stampare una tabella in html ordinata per una delle chiavi)
    Ultima modifica di cumshotevent : 22-05-2012 alle ore 21.21.22

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    A me serviva mantenere le chiavi, quindi ho usato uasort(). Con usort() ad esempio le chiavi verrebbero ricreate a partire da 0.

    Le chiavi però non influiscono sull'ordine in cui stamperesti il contenuto dell'array, se lo scorri con foreach.

    Se vuoi ordinare in un modo più preciso, ti conviene farlo in mysql quando estrai quei dati —assumendo tu li stia prendendo da un database.
    Ultima modifica di dreadnaut : 22-05-2012 alle ore 22.18.02

  7. #7
    cumshotevent non è connesso Neofita
    Data registrazione
    11-08-2011
    Messaggi
    9

    Predefinito

    Allora ti spiego: in pratica i dati li estraggo si da un database, ma sono divisi di partita in partita, di giocatore in giocatore...la pagina in php che ho scritto li riunisce in un unico array e poi mi serve fare una classifica...se non ci riesco ad ordinarli come array dovrò inserirli in una nuova tabella del database, la seccature è che così si dovranno creare tante tabelle quanti sono i gironi...(sia per la classifica dei giocatorisia che per la classifica delle squadre)

    cmq ho sotituito uasort con usort e adesso funge
    Ultima modifica di cumshotevent : 22-05-2012 alle ore 23.00.05

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

  9. #9
    cumshotevent non è connesso Neofita
    Data registrazione
    11-08-2011
    Messaggi
    9

    Predefinito

    So cos'è (anche se per le query più complicate uso access(importando il mio db)) e non credo c'entri...

    in pratica il db è organizzato così:

    Tabella stats
    colonne: id,idgiocatore,idpartita,stat1,stat2[...]
    In pratica le stats di ogni singola partita sono divise

    ovviamente poi c'è un tabella giocatori, una tab partite che si collegano a quella stats tramite idgiocatore e idppartita. Nel file che sto facendo per ogni giocatore controlla tutte le partite e somma tutte le stats dopodicchè fa una classifica di tutti i giocatori.
    So di non essere stato molto chiaro ma spero sia bastato, purtroppo non ho molto tempo. Comunque l'aiuto che mi hai dato è stato più che sufficiente. Grazie mille :)

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •