Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
Bom dia.
É isso mesmo, deu certo. Perfeito.
Eu não conhecia essa função array_rand.
Valeu
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>"."-";
}
?>Princípio básico de Probabilidade.
Pra evitar repetições, você precisa remover do array os valores já sorteados
Pra isso basta usar unset
unset( $array[$indice_sorteado] );
vc pode retirar o número sorteado da array e mandar reorganizar a array, sempre que fizer um sorteio.
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
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)]];
}
?>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]." ";
}
?>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
>
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.
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.
Obrigado a todos que responderam.
Abraço!
Pode colocá-los em um array e usar a função array_rand