Criando um script de sorteio a partir de um CSV com PHP

lauriely lourenço - Mar 28 - - Dev Community

No ano passado, tive a oportunidade de desenvolver um mini script para conduzir um sorteio na minha empresa. Neste artigo, vou compartilhar o código que utilizei o elefantinho.

  • Primeira parte do código:
//Nome do arquivo CSV e a coluna que será usada para o sorteio
$nomeArquivoCSV = 'sorteio.csv';
$colunaSorteio = 'descricao'; 

// Verifica se o arquivo existe
if (!file_exists($nomeArquivoCSV)) {
    die("O arquivo CSV '{$nomeArquivoCSV}' não foi encontrado.");
}

// Lê o conteúdo do arquivo CSV
$linhas = file($nomeArquivoCSV, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// Verifica se o arquivo está vazio
if (empty($linhas)) {
    die("O arquivo CSV '{$nomeArquivoCSV}' está vazio ou mal formatado.");
}
Enter fullscreen mode Exit fullscreen mode

FILE_IGNORE_NEW_LINES: Cada linha do array terá quebra linha usando essa flag isso será ignorado
FILE_SKIP_EMPTY_LINES: Pula linhas vazias nome meio auto explicativo

  • Segunda parte do código:
$call = function ($array) {
    return str_getcsv($array, ";");
};

$colunas = str_getcsv(array_shift($linhas), ";");
$colunaSorteioIndex = array_search($colunaSorteio, $colunas);

if ($colunaSorteioIndex === false) {
    die("A coluna '{$colunaSorteio}' não foi encontrada no arquivo CSV.");
}

// Obtém os elementos da coluna de sorteio
$elementosSorteio = array_column(array_map($call, $linhas), $colunaSorteioIndex);
Enter fullscreen mode Exit fullscreen mode

$call é uma função anônima que recebe um array representando uma linha de dados CSV e o converte em um array usando o separador ponto e vírgula (;) através da função str_getcsv.

str_getcsv(array_shift($linhas), ";"): Esse codigo pega a primeira linha do conjunto de linhas ($linhas), a converte em um array onde cada elemento representa uma coluna, usando o ponto e vírgula (;) como separador.

array_search($colunaSorteio, $colunas): Esta linha procura o índice da coluna especificada por $colunaSorteio dentro do array de colunas ($colunas). O índice é usado para localizar a coluna desejada nos dados do CSV.

  • Agora vamos para parte final do script:
function sortearElemento(array $array)
{
    $indiceSorteado = array_rand($array);
    return $array[$indiceSorteado];
}

// Obtém os elementos da coluna de sorteio
$elementosSorteio = array_column(array_map($call, $linhas), $colunaSorteioIndex);

// Realiza o sorteio
$sorteado = sortearElemento($elementosSorteio);

// Exibe o resultado
echo "Sorte foi para : {$sorteado}";
Enter fullscreen mode Exit fullscreen mode

Link para o script

Espero que este artigo seja útil para quem estiver lendo :)

. . . .