Home > php > Ordinamento personalizzato di array multidimensionali con PHP all’interno di classi (usort,asort)

Ordinamento personalizzato di array multidimensionali con PHP all’interno di classi (usort,asort)

23 dicembre 2009 No Comments

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.

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>