Ordinamento personalizzato di array multidimensionali con PHP
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().

Commenti