Я использовал такой алгоритм, когда мне надо было забить без повторений случайно массив от 0 до n , числами от 0 до n.
mas - массив чисел от 0 до n по порядку:
PHP:
for ($i=n;$i>=0;$i--)
{
$k = rand(0,$i);
$buf = $mas[$i];
$mas[$i] = $mas[$k];
$mas[$k] = $buf;
}
Может и криво, но работало

. Я не знал о shuffle range.