Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

empirerock

Como sortear números pré definidos?

Recommended Posts

Bom dia pessoal.

 

Preciso fazer um sorteio de números pré definidos. Exemplo

Tenho os seguintes números: 05, 22, 44, 37, 38, 4, 15, 53, 9, 28, 12.

Gostaria de sortear 4 números dentre estes que foram informados.

 

Alguém pode me ajudar?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

 

Eu fiz esse código aqui com base na informação passada acima, porém ele exibe números repetidos.

tipo: 2-53-2-1-51-56 (o número 2 aparece duas vezes).

Existe uma função para não repetir os números?

 

Segue o código utilizado:

<?php

$input = array('1', '2', '18', '23', '24', '27', '30', '31', '35', '37', '39', '45', '47', '50', '51', '53', '56', '58');

	for($i =0; $i < 6; $i++){

	echo "<b>".$input[array_rand($input)]."</b>"."-";
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olhando a função do array_rand() parece que vc pode mandar fazer ele trazer uma X quantidade..

 

array_rand($input, 6)

 

nesse caso o 6 ele vai lhe trazer 6 resultados.. testa ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente, gostaria de agradecer a todos pelas dicas.

 

Eu descobri que existe um array_unique, no qual faz com que não se repita o array.

Só que não estou sabendo como fazer.

<?php

$input = array('1', '2', '18', '23', '24', '27', '30', '31', '35', '37', '39', '45', '47', '50', '51', '53', '56', '58');

	for($i =0; $i < 6; $i++){


		echo $input[array_unique[array_rand($input)]];

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa assim...

<?php
	$input = array('1', '2', '18', '23', '24', '27', '30', '31', '35', '37', '39', '45', '47', '50', '51', '53', '56', '58');
	$aux =  array_rand($input,6);
	
	for ($i=0;$i<6;$i++) {
		$id = $aux[$i];
		echo $input[$id]." ";
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

array_unique é usado pra eliminar elementos repetidos de um array

No seu código, array_rand retorna só um valor, não um array. Por isso não funciona.

 

Veja um exemplo funcional:

 

php > $arr = [1, 2, 3, 1, 3, 5];
php > print_r($arr);
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 1
    [4] => 3
    [5] => 5
)
php > $unique = array_unique($arr);
php > print_r($unique);
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [5] => 5
)

 

 

Você pode usar o segundo parâmetro de array_rand, wolfphw sugeriu:

 

php > $arr = range(1, 10);
php > $numbers = array_rand($arr, 5);
php > print_r($numbers);
Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 9
)

 

Dessa forma tem todos os números no array, sem repetição

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

usa assim...

<?php
	$input = array('1', '2', '18', '23', '24', '27', '30', '31', '35', '37', '39', '45', '47', '50', '51', '53', '56', '58');
	$aux =  array_rand($input,6);
	
	for ($i=0;$i<6;$i++) {
		$id = $aux[$i];
		echo $input[$id]." ";
	}
?>

 

 

Nossa, matou a pau. Perfect.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo.. ele vai retirar os duplicados.. como vc quer pegar 6 registros diferentes faz o que eu escrevi.

 

Como funciona o array_rand().. ele vai lhe trazer os ponteiros da array, por isso coloquei em outra array e fir o FOR, passando os ponteiros para lhe mostrar o valor desejado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ThiagoFelipe86
      Bom dia pessoal, 
      Não sou programador, apenas um curioso em HTML, CSS e pequenas ferramentas em JS.
      Tenho um site simples do meu grupo de futebol e queria ver com vcs se é muito complicado criar a seguinte ferramenta:
      O jogador entra no site, confirma sua participação com uma senha e o site sorteia sua equipe.
      A parte principal e talvez a mais complicada, seria o site balancear os times de acordo com o nível que cada jogador teria pre-definido.
      Alguém ai teria como me ajudar, ou pelo menos mostrar um caminho pra eu seguir e estudar.
      obrigado.
       
    • Por Augusto Marcelino
      Tenho um sistema com ouvintes cadastrados, gostaria de saber como criar uma parte de promoção onde insiro esses ouvintes, qual é o tipo de dados da variável $participantes no mysql? como faço o insert dos participantes parcialmente? os ouvinte vão sendo inserido a medida que vão sendo atendidos
    • Por diulio
      Pessoal estou com dificuldades em montar a parte de conferir os números sorteados. Vou tentar explicar de forma objetiva.
      Tenho a tabela abaixo com dois registros (de exemplo):
      -- -- Estrutura da tabela `tb_numescolhidos` -- CREATE TABLE `tb_numescolhidos` ( `id` int(11) NOT NULL, `id_tb_participantes` int(11) DEFAULT NULL, `dezena01` int(2) DEFAULT NULL, `dezena02` int(2) DEFAULT NULL, `dezena03` int(2) DEFAULT NULL, `dezena04` int(2) DEFAULT NULL, `dezena05` int(2) DEFAULT NULL, `dezena06` int(2) DEFAULT NULL, `dezena07` int(2) DEFAULT NULL, `dezena08` int(2) DEFAULT NULL, `dezena09` int(2) DEFAULT NULL, `dezena10` int(2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabela com os números do jogo'; -- -- Extraindo dados da tabela `tb_numescolhidos` -- INSERT INTO `tb_numescolhidos` (`id`, `id_tb_participantes`, `dezena01`, `dezena02`, `dezena03`, `dezena04`, `dezena05`, `dezena06`, `dezena07`, `dezena08`, `dezena09`, `dezena10`) VALUES (1, 1, 5, 9, 18, 25, 33, 38, 41, 49, 51, 57), (2, 2, 1, 9, 16, 19, 27, 33, 39, 43, 56, 60); Criei uma tabela separada para os participantes, pois um participante pode ter vários jogos. Achei que seria a melhor forma.
      -- -- Estrutura da tabela `tb_participantes` -- CREATE TABLE `tb_participantes` ( `id` int(11) NOT NULL, `nome` varchar(50) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Tabela dos participantes'; -- -- Extraindo dados da tabela `tb_participantes` -- INSERT INTO `tb_participantes` (`id`, `nome`) VALUES (1, 'Pessoa 01'), (2, 'Pessoa 02'), (3, 'Pessoa 03'); Agora tenho a segunda tabela com seus registros
      -- -- Estrutura da tabela `tb_sorteios` -- CREATE TABLE `tb_sorteios` ( `id` int(11) NOT NULL, `concurso` int(11) DEFAULT NULL, `data` date DEFAULT NULL, `numsorteado-dz01` int(2) DEFAULT NULL, `numsorteado-dz02` int(2) DEFAULT NULL, `numsorteado-dz03` int(2) DEFAULT NULL, `numsorteado-dz04` int(2) DEFAULT NULL, `numsorteado-dz05` int(2) DEFAULT NULL, `numsorteado-dz06` int(2) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Sorteios da Mega Sena (Exemplo)'; -- -- Inserindo dados da tabela `tb_sorteios` -- INSERT INTO `tb_sorteios` (`id`, `concurso`, `data`, `numsorteado-dz01`, `numsorteado-dz02`, `numsorteado-dz03`, `numsorteado-dz04`, `numsorteado-dz05`, `numsorteado-dz06`) VALUES (1, 1920, '2017-04-12', 25, 31, 33, 39, 43, 45), (2, 1921, '2017-04-13', 5, 19, 23, 31, 33, 51), (3, 1922, '2017-04-14', 9, 19, 33, 34, 45, 59); Agora na página que exibe o nome do participante e seus jogos escolhidos com o total de acerto, não estou conseguindo fazer a parte de comparar os jogos(registro na tabela tb_numescolhidos) escolhidos pelo participante com os jogos sorteados ate o momento (tabela tb_sorteios) lembrando que a comparação é com todos os registros da tabela tb_sorteios.
      Então a comparação é 1 registro da tabela tb_numescolhidos com todos registros da tb_sorteios.
      Obs.: perceba que os registros da tabela tb_soterios podem ter números iguais de um registro para outro, mas na comparação não fará sentido comparar esses números mais de uma vez.
       
      Como poderia melhorar meu código abaixo?
      <?php // CONEXAO COM BANCO DE DADOS session_start(); include('./../conexao/conn.php'); // cria a instrução SQL que vai selecionar os dados $querySelect = sprintf("SELECT tb_numescolhidos.*, tb_participantes.`nome` FROM tb_numescolhidos INNER JOIN tb_participantes ON(tb_numescolhidos.`id_tb_participantes` = tb_participantes.`id`)"); // executa a query $dados = mysql_query($querySelect, $conexao) or die( mysql_error() ); // transforma os dados em um array $linha = mysql_fetch_assoc($dados); // calcula quantos dados retornaram $total = mysql_num_rows($dados); ?> <!doctype html> <html lang="pt-br"> <body> <div class="wrapper"> <div class="main-panel"> <div class="content"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="card"> <div class="card-header" data-background-color="purple"> <h4 class="title">Tabela dos Jogos</h4> <p class="category">Jogos cadastrados dos participantes</p> </div> <div class="card-content table-responsive"> <table class="table table-hover"> <thead> <tr> <th rowspan="2">Participantes</th> <th colspan="10" style="text-align: center;">Dezenas</th> <th rowspan="2">Total de Acertos</th> </tr> <tr> <th>1ª Dezena</th> <th>2ª Dezena</th> <th>3ª Dezena</th> <th>4ª Dezena</th> <th>5ª Dezena</th> <th>6ª Dezena</th> <th>7ª Dezena</th> <th>8ª Dezena</th> <th>9ª Dezena</th> <th>10ª Dezena</th> </tr> </thead> <?php // se o número de resultados for maior que zero, mostra os dados if($total > 0) { // inicia o loop que vai mostrar todos os dados do { ?> <tbody> <tr> <td><?=$linha['nome']?></td> <td><?=$linha['dezena01']?></td> <td><?=$linha['dezena02']?></td> <td><?=$linha['dezena03']?></td> <td><?=$linha['dezena04']?></td> <td><?=$linha['dezena05']?></td> <td><?=$linha['dezena06']?></td> <td><?=$linha['dezena07']?></td> <td><?=$linha['dezena08']?></td> <td><?=$linha['dezena09']?></td> <td><?=$linha['dezena10']?></td> <td> <?php /* Resultado da comparação dos números escolhidos com os números sorteados */ ?> </td> </tr> <?php // finaliza o loop que vai mostrar os dados }while($linha = mysql_fetch_assoc($dados)); // fim do if } ?> </tbody> </table> </div> </div> </div> </div> </div> </div> </div> </div> </body> </html>  
      Alguém tem ideia de como posso resolver esse problema?
       
      Desde já muito obrigado...
    • Por snowstormdelivery
      Tenho um site de sorteio de cargos para um jogo RPG. Eu uso inputs para criar uma arraylist de nomes que é mandada através do método .POST para o arquivo PHP, então, o shuffle passa a sortear, depois o print mostra tudo. Exemplo: Bruxo: Lucas
      O problema é que muitas pessoas vem reclamando que pegam o mesmo cargo toda hora! Eu não sei o que fazer, até por que não sou experiente nessa linguagem.
      Já pensei em fazer que o shuffle sorteie duas vezes, não só uma, mas eu não consegui fazer a façanha. Também tentei colocar a ordem dos valores embaralhadas, mas continua na mesma. Por favor, me ajudem?!

      Conheçam o site para melhor entendimento: guerrascivis.mygamesonline.org -ou- guerrascivis.freeoda.com

      PS: Costuma repetir o cargo de quem coloca o nome no input sete ou seis.


      Código PHP:
      <?php $pessoas = isset($_POST['name']) ? $_POST['name'] : null; shuffle($pessoas); print "Juiz: " . $pessoas[11]; print " / Policial: " . $pessoas[7]; print " / Anjo: " . $pessoas[10] . "<br><br>"; print "Assassino: " . $pessoas[9]; print " / Aprendiz: " . $pessoas[8]; print " / Silence: " . $pessoas[5]."<br><br>"; print "Paralisador: " . $pessoas[4] . " " . "<br>"; print "/Paparazzi: " . $pessoas[6] . " " . "<br>"; print "/Bruxo: " . $pessoas[0] . " " . "<br>"; print "/Detetive: " . $pessoas[2] . " " . "<br>"; print "/Aldeao: " . $pessoas[3] . " " . "<br>"; print "/Espirito: " . $pessoas[1] . " " . "<br><br>"; print "/Fada: " . $pessoas[1] . " "; print "/Escudeiro: " . $pessoas[1] . " " . "<br>"; print "/Psicopata: " . $pessoas[0] . " "; print "/Demonio: " . $pessoas[0] . "<br><br>"; ?>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.