Sistema de sorteio com PHP

Escrito por Rafael em 20 janeiro, 2009 826 visualizações

Hoje iremos desenvolver um sisteminha de sorteio bem simples que pode ser utilizado em alguns casos. Iremos armazenar nossos participantes em um array, porém o mais correto seria armazena-los em um banco de dados, mas o conceito é o mesmo.

Veja como o sistema funciona, clicando aqui.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 
// Matriz com todos os participantes
$participantes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila", "Roberto");
 
// Definindo o número de participantes
$numParticipantes = sizeof($participantes);
 
// Informações adicionais
$chances = round((1 / $numParticipantes) * 100);
echo "- Temos no total <b>".$numParticipantes."</b> participantes; <br />";
echo "- Cada participante teve <b>".$chances."%</b> de chance de ganhar; <br /><br />";
 
// Sorteando
 
# Primeiro ganhador
$sorteado[1] = $participantes[rand(0,$numParticipantes - 1)];
 
# Segundo ganhador
for ($i = 1; $i < 2; $i++) {
	$sorteado[2] = $participantes[rand(0,$numParticipantes - 1)];
	// Caso o ganhador já tenha saido, sorteia novamente.
	if ($sorteado[2] == $sorteado[1]) {
		--$i;
	}
}
 
# Terceiro ganhador
for ($i = 1; $i < 2; $i++) {
	$sorteado[3] = $participantes[rand(0,$numParticipantes - 1)];
	// Caso o ganhador já tenha saido, sorteia novamente.
	if ($sorteado[3] == $sorteado[1] || $sorteado[3] == $sorteado[2]) {
		--$i;
	}
}
 
// Exibindo ganhadores
echo "<b>Ganhadores:</b> <br />";
echo "<b>1°</b> - " . $sorteado[1] . "<br />";
echo "<b>2°</b> - " . $sorteado[2] . "<br />";
echo "<b>3°</b> - " . $sorteado[3] . "<br />";
 
?>

Agora vou tentar explicar melhor o sisteminha:

- Linha 4: Colocamos todos os participantes em um array(), porém como já foi dito, o mais correto seria colocar os participantes em uma tabela no banco de dados;

- Linha 7: Armazenamos o numero de participantes em uma variável;

- Linha 10: Calculamos a chance que o participante tem de ganhar (em %);

- Linha 11 e 12: Exibimos as informações adicionais;

- Linha 17: Sorteamos o primeiro ganhador e armazenamos o individuo em um array(). Utilizamos a função rand() para sortear um numero desde 0 (zero) até o numero máximo de participantes, colocamos “-1″ pois lembre-se que em um array o primeiro valor sempre é 0 (zero) e não 1;

- Linha 20 a 26: Utilizamos o laço for() para sortear o segundo ganhador, pois se o segundo ganhador for igual a o primeiro, precisamos sortear novamente até sair um participante diferente;

- Linha 29 a 35: Utilizamos novamente o laço for(), desta vez para sortear o terceiro ganhador. E segue o mesmo conceito do segundo ganhador;

- Linha 38 a 42: Exibimos os ganhadores.

Isso é apenas uma base de como você pode desenvolver um sistema de sorteio, o conceito praticamente será sempre o mesmo. Até mais.


4 Comentários em “Sistema de sorteio com PHP”


  1. Julio disse:

    e pra eu por mais participantes? por exemplo, 5 ou 6 participantes serem sorteados como faz?

    valeu e eu achei bem bacana por ser simples

  2. faael disse:

    Olá Julio,

    Bom, esse script que eu fiz não é muito flexível, e para exibir mais sorteados teria que fazer mais alguns loops; O objetivo era mesmo mostrar alguns recursos possíveis para fazer um sistema de sorteio. Porém eu fiz aqui um script mais flexível, onde basta você configurar uma váriavel para definir o número de sorteados:

    <?php
    // Definimos em um array os participantes do sorteio
    $participantes = array("Rafael", "João", "Maria", "Manoel", "Pedro", "Camila", "Roberto", "Patricia");
    // Definimos o número de participantes que serão sorteados
    $numero_sorteados = 4;
     
    // Enquanto o número de sorteados for maior que zero, o sorteio continua
    while ($numero_sorteados > 0) {
    // Reordenamos os participantes
    sort($participantes);
    // Recontamos o número de participantes
    $numero_participantes = count($participantes) - 1;
    // Sorteamos um número entre zero e o número de participantes
    $sort = rand(0, $numero_participantes);
    // Colocamos o sorteado em um array
    $sorteados[$numero_sorteados] = $participantes[$sort];
    // Retiramos o sorteado do array de participantes, para que ele não seja sorteado novamente
    unset($participantes[$sort]);
    // Decrementamos o número de sorteados
    $numero_sorteados--;
    }
     
    // Reordenamos os sorteados pela chave
    ksort($sorteados);
     
    // Exibindo os ganhadores
    foreach ($sorteados as $lugar => $sorteado) {
    echo "<b>" . $lugar . "º</b> - " . $sorteado . "<br />";
    }
    ?>

    Então para exibir 6 sorteados, por exemplo, basta definir o valor da váriavel $numero_sorteados; Ok?
    Abraços.

  3. Resultado da Promoção Lanterna Verde | Multiverso DC.com disse:

    [...] favorecer quaisquer participantes. Vale destacar que ele foi, inicialmente disponibilizado no site http://faael.net/sistema-de-sorteio-com-php/, e foi alterado para se adaptar às nossas [...]

  4. Resultado da Promoção #1bolaofilmow | Blog do Filmow disse:

    [...] Utilizamos um script desenvolvido por Rafael Couto que encontramos na internet que pode ser baixado aqui. Colocamos o nome das 26 pessoas e de forma aleatória o sistema escolheu um ganhador ou ganhadora [...]

Deixe um comentário