Конечно, вероятность есть. Как уже писали, нельзя сравнивать со следующим пустым значением.
Думаю, лучше сделать так:
// Необходимое количество случайных чисел
$limit = 4;
// Максимальное значение случайного числа
$max = 100;
// Массив, в который складываются случайные числа
$numbers = [];
// Запускаем цикл
while(1) {
// Генерируем случайное число
$random = rand(1, $max);
// Проверяем, есть ли уже такое число в массиве-результате
if(!in_array($random, $numbers)) {
// Если такого числа нет, добавляем его в массив
$numbers[] = $random;
}
// Если уже набрали нужное количество чисел - выходим из цикла
if(count($numbers) == $limit) {
break;
}
}
var_dump($numbers);