Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    322

    Ordinamento array con arsort

    Salve

    Sto utilizzando la funzione arsort per ordinare un array senza perdere l'associazione degli indici.

    L'array dopo l'ordinamento è così composto ed ordinato

    88 -> 120
    81 -> 116
    1 -> 114
    85 -> 113
    80 -> 111
    55 -> 111
    82 -> 110
    63 -> 109
    3 -> 109
    86 -> 108
    90 -> 108
    77 -> 108
    8 -> 108

    Quello che non capisco è perché non mi ordina anche gli elementi.. infatti mi visualizza prima 80 che 55.. ma poi mi visualizza 86,90,77 e 8?

    Con quale criterio lo fa?

    A me interesserebbe che me li visualizzasse in maniera crescente

  2. #2
    arsort() — Sort an array in reverse order and maintain index association

    come vedi vengono visualizzati in ordine inverso partendo dai numeri di destra

    prova ad usare asort($array,SORT_NUMERIC);

  3. #3
    Gli elementi sono ordinati, gli indici no. D'altra parte non e' possibile ordinare sia gli indici che gli elementi mantenendo l'associazione tra chiave e valore. O uno o l'altro.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    322
    Ma veramente

    86 -> 108
    90 -> 108
    77 -> 108
    8 -> 108

    Mi sembrano in ordine sparso ;-)
    Al max doveva essere 90,86,77,8 ma non lo è..

    Con asort($array,SORT_NUMERIC) non ottengo l'effetto desiderato!
    Non c'è un modo per ordinare anche gli indici dopo aver ordinato l'array?

    Un po' come un excel.. lo si ordina per un criterio, poi l'altro

  5. #5
    Non mi e' venuto in mente nessun modo per farlo direttamente, questo codice comunque dovrebbe funzionare.

    Codice PHP:
    <?php
    $array 
    = array(
        
    88 => 120,
        
    81 => 116,
        
    => 114,
        
    85 => 113,
        
    80 => 111,
        
    55 => 111,
        
    82 => 110,
        
    63 => 109,
        
    => 109,
        
    86 => 108,
        
    90 => 108,
        
    77 => 108,
        
    => 108);

    print_r($array);

    $output = array();

    while (list(
    $key$val) = each($array)) {
        
    $output[0][] = $key;
        
    $output[1][] = $val;
    }

    array_multisort($output[1], SORT_NUMERICSORT_DESC,
                    
    $output[0], SORT_NUMERICSORT_DESC);

    print_r(array_combine($output[0], $output[1]));
    ?>

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    322
    Ma grazie!

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    322
    Mi ricollego a questo mio vecchio anche se non troppo.. messaggio!

    Avrei ora la necessità di riordinare un'array.. mi spiego meglio

    Mi ritrovo con un file di testo contenente:

    Codice PHP:
    1,114,3.2,93,47.3,109,24.4,109,25.5,84,81 etc.. 
    Dove

    1,2,3,4,5 sono i numeri estratti
    114,93,109,109,84 sono il numero di volte in cui quel numero è stato estratto
    3,47,24,25,81 sono le posizioni ricoperte da quei numeri nella classifica dal + estratto al - estratto..

    Ho creato un array per ogni valore

    Codice PHP:
    est[2]=93 pos[2]=47
    est
    [3]=109 pos[3]=24
    est
    [4]=109 pos[4]=25
    etc
    .. 
    A questo punto, in base all'ultima estrazione che vado ad inserire posso ottenere modifiche al valore di questi array.. mettiamo il caso che escano il 2 e il 4

    avrei che

    Codice PHP:
    est[2]=94 pos[2]=? 
    a questo punto dovrei riordinare pos[] sempre in modo decrescente (arsort) ma che mi tenga conto del key.. non vorrei che se il 7 il 9 ed il 4 hanno lo stesso valore, mi metta in ordine 9,4,7 a caso!

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    322
    Credo di averVi resi partecipe di un ragionamento un po' ingarbugliato

    Provo a semplificare il tutto

    Ho ordinato un array con arsort con risultato:

    88 -> 120
    81 -> 116
    1 -> 114
    85 -> 113
    80 -> 111
    55 -> 111

    Ora: durante l'esecuzione di altre funzioni, ad asempio array[55] diventa 112
    A queto punto vorrei riordinare l'array ottenendo

    88 -> 120
    81 -> 116
    1 -> 114
    85 -> 113
    55 -> 112
    80 -> 111

    Ovviamente mantenendo le associazioni
    Ho provato con array_multisort ma non riesco ad ottenere il risultato voluto

    e pensare che arsort sarebbe perfetta se mi ordinasse anche gli indici

  9. #9
    Utente di HTML.it L'avatar di kakashi
    Registrato dal
    Feb 2005
    Messaggi
    357
    grazie raga mi siete stati utilissimi

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.