hola sebandrescc2, al momento de asignar a la perdona el número ¿Puedes ya tener a la mano los que han sido asignados? o ¿De donde sacas esos numeros del 1 al 20? son fijos o tambien vienen de una BD?
 
A mi lo que se me ocurre es que ya pudieras tener los asignados antes en un array y el conglomerado posble en otro algo asi:    
Código PHP:
Ver original- $numerosAsignados = array(1,5,10); 
- $numeros = array(1,2,3,4,5,6,7,8,9,10,11,12,13.....20); 
-   
- //Aqui obtienes los valores que no están en el arreglo de numeros asignados 
-   
- //Luego obtienes una posición aleatoria del arreglo resultante. 
Creo que esa es la lógica que necesitas, no? en caso contrario comenta a ver si hubo algo que no entendiera. No estoy seguro de la sintaxis exactas de las funcions array_rand y diff pues lo corro en frio, pero supongo que basta con que pruebes o termines d documentarte en la página de PHP