Powered by Blogger.

venerdì 4 aprile 2014

Gli array multidimensionali che prenderò in considerazione sono tabelle con indici di riga numerici e indici di colonna di stringhe. Quando leggiamo dei dati dal database possiamo estrarre il risultato della query e memorizzarlo in un array bidimensionale e cioè in una tabella. In questi casi basta usare la clausola ORDER BY nell'istruzione sql per ordinare i nostri dati, ma se avessimo nell'array dei campi non presenti nel database oppure i dati nell'array non sono caricati da un database?
Sul sito php.net ho trovato la funzione array_multisort che però presenta un problema: bisogna generare un array per ogni colonna.
Alla fine ho scritto questa funzione che mi sembra più semplice e intuitiva.

 public function datatable_sort($dtb, $campo, $tipoord){  
      if (is_array($dtb)){  
           for ($i = 0; $i<count($dtb)-1; $i++){  
                for ($j = $i + 1; $j < count($dtb); $j++){  
                     if ($tipoord == "D") { //Decrescente  
                          if ($dtb[$i][$campo] < $dtb[$j][$campo]){  
                               $appoggio = $dtb[$i];  
                               $dtb[$i] = $dtb[$j];  
                               $dtb[$j] = $appoggio;  
                          }  
                     }else { //Crescente  
                          if ($dtb[$i][$campo] > $dtb[$j][$campo]){  
                               $appoggio = $dtb[$i];  
                               $dtb[$i] = $dtb[$j];  
                               $dtb[$j] = $appoggio;  
                          }  
                     }  
                }  
           }  
      }  
      return $dtb;  
 }  

La funzione datatable_sort ha tre parametri:
  1. $dtb: l'array tabella;
  2. $campo: il campo per il quale vogliamo ordinare la tabella;
  3. $tipoord: può assumere il valore 'D' (descrescente) o qualsiasi altro valore (crescente).
Alla fine viene restituito l'array ordinato.
Un esempio di utilizzo.
 $data[] = array('volume' => 65, 'edition' => 3);  
 $data[] = array('volume' => 26, 'edition' => 5);  
 $data[] = array('volume' => 95, 'edition' => 2);  
 $dataord = datatable_sort($data, "volume", "D");