Home > php > Ordinamento personalizzato di array multidimensionali con PHP

Ordinamento personalizzato di array multidimensionali con PHP

23 dicembre 2009 No Comments

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().

Tags: array php

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>