sai che ho fatto delle prove e array_pop risulta più veloce solo sotto la soglia di 40 elementi da estrarre?
dopo è più veloce la soluzione in_array

metto il codice che ho usato per il test
Codice PHP:
<?php


$s 
1// valore di partenza per random
$t 300// valore di fine per random
$n 7// numero di elementi da estrarre


$p 0// contatore ripetizioni per test
$p_max 1000// numero di ripetizioni per test


$faster_2 0// variabile contatore per contare quando array_pop è più veloce


while($p $p_max) {
    
// inizio con in_array()
    
$start1 microtime();
    
$range = array();
    for(
$a 0$a <= $n$a++) {
        
$num rand($s$t);
        if(!
in_array($num$range)) {
            
$range[] = $num;
        } 
    }
    
$elapsed1 microtime() - $start1;
    
    
// proseguo con array_pop()
    
$start2 microtime();
    
$range1 range($s$t);
    
$range1_out = array();
    
shuffle($range1);
    for(
$a 0$a <= $n$a++) {
        
$range1_out[] = array_pop($range1);
    }
    
$elapsed2 microtime() - $start2;
    
    
// delta di esecuzione dei due metodi
    
$delta $elapsed1 $elapsed2;
    
    
// se array_pop è più veloce, aggiungo al contatore
    
if($delta 0) {
        
$faster_2++; 
    }
    
$p++;
}


echo 
"array pop è più veloce nel " $faster_2 $p_max 100 "% dei casi\n";
?>