giusto perchè non avevo nulla da fare:
Codice PHP:
<?php
$arr = array();
for($i=0;$i<20;$i++)
$arr[$i]=array('label'=>"Label $i",'valore'=>$i);
$arr_sel = array(3,7,1);
//output: ordinare $arr in maniera che gli elementi di valore contenuto in $arr_sel siano in testa
function cmp($a,$b){
global $arr_sel;
$in_a = in_array($a['valore'],$arr_sel);
$in_b = in_array($b['valore'],$arr_sel);
if(!$in_a && !$in_b) return 0; //l'ordinamento dei valori non
//contenuti in $arr_sel è indifferente
if($in_a && $in_b)
return $a['valore'] == $b['valore'] ? 0 :
($a['valore']<$b['valore'] ? -1 : 1);
if($in_a) return -1;
return 1;
}
echo "prima:\n";
print_r($arr);
echo "dopo:\n";
//print_r($arr);
//o usi:
//usort($arr,'cmp');
//oppure se la tua versione di php lo supporta:
usort($arr, function ($a,$b) use(&$arr_sel){
$in_a = in_array($a['valore'],$arr_sel);
$in_b = in_array($b['valore'],$arr_sel);
if(!$in_a && !$in_b) return 0; //l'ordinamento dei valori non
//contenuti in $arr_sel è indifferente
if($in_a && $in_b)
return $a['valore'] == $b['valore'] ? 0 :
($a['valore']<$b['valore'] ? -1 : 1);
if($in_a) return -1;
return 1;
});
print_r($arr);
?>