La funzione array_rand() secondo me non funziona bene.
A volte crea un array che tra i risultati ha un 0 anche se l'array tra cui ha operato la scelta non lo contiene.
Ad esempio:


Codice PHP:
//Array di partenza

Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 )

//Array scelto dalla funzione array_rand() impostata per scegliere 10 elementi

Array ( [0] => 18 [1] => 16 [2] => [3] => 19 [4] => [5] => 15 [6] => 12 [7] => [8] => 11 [9] => 
Si nota subito che nella settima posizione si trova uno zero che non è contenuto nell'array di partenza.
Questo fatto capita spesso anche per array più lunghi.

--------------------- aggiornamento ---------------
La funzione array_rand() non restituisce un array composto dagli elementi scelti a caso dell'argomento ma da un array composto dagli indici scelti a caso dell'array argomento della funzione.