Ordinamento personalizzato di array multidimensionali con PHP

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Problema:
Ordinare un array multidimensionale in base al valore dei campi posti nel secondo livello di profondità.

Soluzione:
Utilizzare la funzione PHP uasort() per eseguire l’ordinamento in base ai campi desiderati.

Per capire meglio l’array in questione è il seguente:

[PersonaCampo] => Array
    (
        [0] => Array
            (
                [persona_campo_id] => 29
                [persona_id] => 7
                [persona_campo_tipo_id] => 1
                [valore] => ciao@google.com
                [PersonaCampoTipo] => Array
                    (
                        [persona_campo_tipo_id] => 1
                        [nome] => Mail
                        [order] => 3
                    )
            )
        [1] => Array
            (
                [persona_campo_id] => 52
                [persona_id] => 7
                [persona_campo_tipo_id] => 1
                [valore] => Mario
                [PersonaCampoTipo] => Array
                    (
                        [persona_campo_tipo_id] => 1
                        [nome] => Nome
                        [order] => 1
                    )
            )
        [2] => Array
            (
                [persona_campo_id] => 24
                [persona_id] => 7
                [persona_campo_tipo_id] => 1
                [valore] => Bianchi
                [PersonaCampoTipo] => Array
                    (
                        [persona_campo_tipo_id] => 1
                        [nome] => Cognome
                        [order] => 2
                    )
            )

Volendo ordinare l’array in base al campo ‘order’ che ha il percorso ['PersonaCampo'][indice]['PersonaCampoTipo']['order'], dove indice è la posizione attuale nell’array che va da 0 a 2, è possibile ricorrere alla funzione uasort() la quale accetta come parametri l’array e la funzione personalizzata per l’ordinamento.


Il codice da utilizzare applicato all’array dell’esempio è il seguente:

<?php
function cmp($a, $b)
{
 $aq = $a['PersonaCampoTipo']['order'];
 $bq = $b['PersonaCampoTipo']['order'];
 
 if ($a == $b) {
 return 0;
 }
 return ($aq < $bq) ? -1 : 1;
}
uasort($results[$i]['PersonaCampo'], "cmp");
?>

Modificando il valore delle variabili $aq e $bq si può ordinare l’array in base ai campi desiderati.


Per invertire l’ordine basta sostituire la riga con il return all’interno della funzione  in:

<?php
return ($aq > $bq) ? -1 : 1;
?>


Nota: la funzione uasort() mantiene l’associazione delle chiavi all’interno dell’array principale. Per fare in modo che le chiavi vengano riassegnate utilizzare la funzione usort().

Server dedicato

Condividi questo post


Commenti