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'] ? 
            (
$a['valore']<$b['valore'] ? -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'] ? 
            (
$a['valore']<$b['valore'] ? -1);
    
    if(
$in_a) return -1;
        
    return 
1;
});

print_r($arr);

?>