Ordinamento personalizzato di array multidimensionali con PHP all'interno di classi (usort,asort)
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).
Riprendendo la funzione utilizzata in un precedente articolo è possibile utilizzarla anche all’interno di una classe praticamente senza ulteriori modifiche:
<?php
class nomeClasse{
function ordina($array_da_odinare){
function cmp($a, $b)
{
$aq = $a['PersonaCampoTipo']['order'];
$bq = $b['PersonaCampoTipo']['order'];
if ($a == $b) {
return 0;
}
return ($aq < $bq) ? -1 : 1;
}
uasort($array_da_odinare, "cmp");
}
}
?>
Lo script funziona correttamente ma se la funzione nomeClasse->ordina() venisse richiamata più volte (ad esempio all'interno di un ciclo) l'ambiente PHP genera un errore e blocca l'esecuzione in quanto la funzione cmp() viene ridichiarata. Per ovviare al problema si deve quindi modificare il codice:
<?php
class nomeClasse{
function ordina($array_da_odinare){
uasort($array_da_odinare, array(&$this, "cmp"));
}
function cmp($a, $b)
{
$aq = $a['PersonaCampoTipo']['order'];
$bq = $b['PersonaCampoTipo']['order'];
if ($a == $b) {
return 0;
}
return ($aq < $bq) ? -1 : 1;
}
}
?>
Come si vede dal codice il secondo parametro della funzione uasort() non è più una stringa con il nome della funzione personalizzata di ordinamento ma un array con il riferimento alla classe stessa e successivamente alla funzione.
Commenti