Нельзя надеяться на результат array_rand()
если подразумевается получение нескольких случайных ключей. Как только второй аргумент будет равен единице, вместо массива ключей будет возвращен ключ случайного элемента. Лучше экранировать:
if (count($array) > 0 && $amount > 0) {
$keys = (array) array_rand($array, min($amount, count($array)));
}