<?php
/**
 * Retorna um vetor de tamanho $count com numeros aleatorios entre $min e $max
 * @param int $min Menor valor possivel para o valor randomico
 * @param int $max Maior valor possivel para o valor randomico
 * @param int $count Numero de elementos desejados no vetor resultante
 * @param bool $unico Flag indicando se o vetor resultante sera unico (sem valores repetidos)
 * @return array[int] Vetor de valores aleatorios
 */
function rand2($min = 0, $max = 0, $count = 1, $unico = true) {
        $min = intval($min);
        $max = min(mt_getrandmax(), intval($max));

        $count = abs($count);
        $vetor = array();
        if ($unico) {
                $total_valores = ($max - $min) + 1;
                if ($count > $total_valores) {
                        trigger_error('Impossivel retornar '.$count.' valores unicos em um conjunto de '.$total_valores.' valores', E_USER_WARNING);
                        return false;
                }
                $valores = range($min, $max);
                for ($n = 0; $n < $count; $n++) {
                        $posicao = mt_rand(0, $total_valores - 1);
                        $vetor[] = $valores[$posicao];
                        $total_valores -= 1;
                        unset($valores[$posicao]);
                        $valores = array_values($valores);
                }
        } else {
                for ($n = 0; $n < $count; $n++) {
                        $vetor[] = mt_rand($min, $max);
                }
        }
        return $vetor;
}