El problema que veo hasta ahora es que se mete algo en posicion [0] pero es culpa de array_rand() ... si usas shuffle() no sucede eso, diria es un BUG de array_rand() porque en el manual no dice nada de que deba hacer eso
En tu caso, deberias hacer un shuffle() y luego solo mostrar los primeros 4 elementos ... la diferencia es que shuffle() es por referencia que acepta el array asi que lo modifica y no hace copia como array_rand()
Código PHP:
<?php
$a = array(9, 26, 31, 42, 4, 2, 11, 13, 19, 20, 23, 24, 28, 30, 39, 39, 1, 5, 14, 18, 36, 49, 15, 16, 25, 27, 33, 34);
shuffle($a);
for ($i = 0; $i < 4; $i++) {
if ($i < 3)
echo $a[$i]." - ";
else
echo $a[$i];
}
Otra solucion es ignorar ese primer valor:
Código PHP:
<?php
$a = array(9, 26, 31, 42, 4, 2, 11, 13, 19, 20, 23, 24, 28, 30, 39, 39, 1, 5, 14, 18, 36, 49, 15, 16, 25, 27, 33, 34);
$rand_keys = array_rand($a, 5);
asort($rand_keys);
for ($i = 1; $i < 5; $i++) {
if ($i < 4)
echo $rand_keys[$i]." - ";
else
echo $rand_keys[$i];
}