Нельзя надеяться на результат array_rand() если подразумевается получение нескольких случайных ключей. Как только второй аргумент будет равен единице, вместо массива ключей будет возвращен ключ случайного элемента. Лучше экранировать:

if (count($array) > 0 && $amount > 0) {
    $keys = (array) array_rand($array, min($amount, count($array)));
}