la funzione ordina un array bidimensionale del tipo
array[chiave uno][chiave due] = valore
ordina per prima secondo la 'chiave uno' poi in funzione della scelta secondo 'chiave due' o secondo il 'valore'
la funzione ricrea un array ordinato secondo la scelta
è evidente che non è possibile ordinare per la II° chiave e contemporaneamente per il valore
array[chiave uno][chiave due] = valore
ordina per prima secondo la 'chiave uno' poi in funzione della scelta secondo 'chiave due' o secondo il 'valore'
la funzione ricrea un array ordinato secondo la scelta
PHP:
<?php
function ordina_arrbi($a,$q){
//$a l'array multidimensionale da ordinare
//$q scelta ordinamento: se == 0 per seconda chiave, se == 1 per valore
$q=(int)$q;
//verifica errori
if(!is_array($a)){//non è un array
return FALSE;
}
if($q <0 || $q >1){//inserito dato ordinamento errato
return FALSE;
}
ksort($a);//ordino la prima chiave e ciclo per ordinare il resto
foreach($a as $val => $ch){//ciclo il primo array
if(!is_array($ch)){//non è un array bidimensionale
return FALSE;
}else{
if($q==0){
ksort($ch);//ordino per la seconda chiave
foreach($ch as $val_s => $ch_s){//ricreo l'array ordinato per I° e II° chiave
$ar_o[$val][$val_s]=$ch_s;
}
}else{
natsort($ch);//ordino per valore
foreach($ch as $val_s => $ch_s){//ricreo l'array ordinato per I° chiave e valore
$ar_o[$val][$val_s]=$ch_s;
}
}
}
}
return $ar_o;//ritorno l'array ordinato
}
//*****TEST *********
//l'array da ordinare
$arr['Verdi']=array('Gennaro'=>3, 'Artemisia'=>1, 'Zuzzurro'=>2);
$arr['Bianchi']=array('Wolfang'=>2, 'Roberta'=>0, 'Antonia'=>3);
$arr['Rossi']=array('Semiramide'=>2, 'Antonia'=>2, 'Umberto'=>2, 'Abelarda'=>1);
$arr['Forti']=array('Zelminia'=>3, 'Lavinia'=>2);
var_dump($arr); echo "<br>";
$arr_ordinato=ordina_arrbi($arr,0);//ordino per I° e II° chiave
if($arr_ordinato != FALSE){
echo "<pre>";
echo "array ordinato per I° e II° chiave<br />";
var_dump($arr_ordinato);
echo "</pre>";
}else{
echo "errore";
}
$arr_ordinato=ordina_arrbi($arr,1);//ordino per per I° chiave e il valore
if($arr_ordinato != FALSE){
echo "<pre>";
echo "array ordinato per I° chiave e valore<br />";
var_dump($arr_ordinato);
echo "</pre>";
}else{
echo "errore";
}
?>