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);
?>