ordina l'array multidimensionale in modo ricorsivo - è ragionevole

3

In poche parole, avevo bisogno di attraversare qualsiasi numero di dimensioni di un array multidimensionale (o meno) e volevo che il processo fosse il più prevedibile possibile (al fine di proliferare il modello attraverso un più ampio corpo di lavoro). Così mi è venuto in mente questo: sembra troppo facile. Ci sono dei pozzi di performance che usano ksort come questo di cui non sono a conoscenza? C'è un modo più pulito / più performante per realizzare questo? Il mio obiettivo era quello di ordinare (numericamente) un vasto gruppo di gruppi di dati deformati allo scopo di dire un sistema di punteggio a livelli con valori associativi annidati che alcuni sono matrici di più informazioni associative (si pensi a una carta da golf molto complessa o qualcosa di simile).

Questa cattiva pratica è questa? :

function recursive_key_sort(&$by_ref_array)
{
    ksort($by_ref_array, SORT_NUMERIC );
    foreach ($by_ref_array as $key => $value) {
        if (is_array($value))
        {
            recursive_key_sort($by_ref_array[$key]);
        }
    }
}

non ho visto una domanda simile, quindi mi scuso in anticipo, ancora una volta il mio principale interesse / preoccupazione è "questo sembra troppo semplice".

    
posta Brandt Solovij 04.08.2015 - 17:34
fonte

1 risposta

5

Dopo alcune indagini, direi che questo sembra piuttosto ottimale. Per favore vedi il mio succo qui .

Nel file PHP nel gergo ho generato alcuni array annidati con chiavi non ordinate usando una funzione, contato il numero totale di chiavi (comprese le chiavi negli array annidati) usando l'opzione ricorsiva per count , l'ordinamento temporizzato dell'array usando la funzione sopra riportata, ha generato un array piatto con chiavi non ordinate e l'ordinamento temporizzato utilizzando ksort.

L'ho fatto per una serie di diversi tasti di primo livello, e ogni 16 volte, preso la media e poi eseguito i dati di output tramite gnuplot.

Puoi vedere dal grafico di output che la tua funzione ricorsiva (viola) tende verso il ksort dell'array piatto (blu) nella misura in cui a più di 1 milione di tasti totali, l'ordinamento ricorsivo richiede in media circa 1,5 x il tempo del piatto ordinamento per un numero equivalente di chiavi.

Si noti che questo è stato eseguito su PHP 5.6.10 su ArchLinux, YMMV

    
risposta data 05.08.2015 - 23:17
fonte

Leggi altre domande sui tag