Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um script que faz o sorteio de nomes aleatórios. O problema é que meu cliente quer tem nomes fixos para sem sorteados também. Até ai tudo certo. Mas se o número de ganhadores que ele escolheu for maior que o número de nomes fixos meu script entra em loop, e não consigo achar uma solução. Alguém poderia me ajudar?
for($j = 0; $j < $numGanhadores; $j++){
$index = mt_rand(0, $numParticipantes);
if(!$ganhadoresFixos){
if(!in_array($nomes[$index], $ganhadoresArray)){
$ganhadores[] = (object)[ "nome" => $nomes[$index]];
$ganhadoresArray[] = $nomes[$index];
$nomesGanhadores = implode(",", $ganhadoresArray);
}else{
$j--;
}
}else{
if(array_intersect($nomes, $ganhadoresFixos)){
if(in_array($nomes[$index], $ganhadoresFixos) && !in_array($nomes[$index], $ganhadoresArray)){
$ganhadores[] = (object)[ "nome" => $nomes[$index]];
$ganhadoresArray[] = $nomes[$index];
$nomesGanhadores = implode(",", $ganhadoresArray);
}else{
$j--;
}
}else{
if(!in_array($nomes[$index], $ganhadoresArray)){
$ganhadores[] = (object)[ "nome" => $nomes[$index]];
$ganhadoresArray[] = $nomes[$index];
$nomesGanhadores = implode(",", $ganhadoresArray);
}else{
$j--;
}
}
}
}
O ponto do loop é mais especificamente aqui:
if(in_array($nomes[$index], $ganhadoresFixos) && !in_array($nomes[$index], $ganhadoresArray)){
$ganhadores[] = (object)[ "nome" => $nomes[$index]];
$ganhadoresArray[] = $nomes[$index];
$nomesGanhadores = implode(",", $ganhadoresArray); $j--;
}
Preciso que ele veja se existem nomes na lista de participantes e na lista de vencedores fixos que ainda não foram selecionados, e se não existir ele executar o padrão
if(!in_array($nomes[$index], $ganhadoresArray)){
$ganhadores[] = (object)[ "nome" => $nomes[$index]];
$ganhadoresArray[] = $nomes[$index];
$nomesGanhadores = implode(",", $ganhadoresArray); $j--;
}@EdCesar
Então, o sorteio eu consigo fazer, o que eu preciso é fazer somente os nomes que estão na segunda lista ganhar o sorteio. Porém o meu problema é o seguinte: quando só tem 1 nome na segunda lista, e o número de ganhadores que o usuário escolhe é maior que 1 o meu código fica num.loop infinito. O correto seria ele ignorar a 2ª lista se os nomes dela já foram sorteados e ainda existem mais vencedores para serem sorteados
@JulinhoooO, joia!
Seu código não esta muito fácil de entender, mas pelo que entendi, você quer fazer um simples sorteio, com base em duas listas, certo? Veja essa outra ideia:
// Estou considerando que um participante só pode concorrer uma vez,while($quantidadeSorteio--) {