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.");
}
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);
$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}";
Espero que este artigo seja útil para quem estiver lendo :)