kinho! 7 Denunciar post Postado Fevereiro 4, 2013 Bom galera como o titulo ja disse, eu preciso repetir um numero de 1 a 100, e nao pode repetir nenhum... Tava usando a funçao rand mais a mesma repete valores, Deste já agradeço pela ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Fevereiro 4, 2013 Remova os números que já foram sorteados enquanto o total for maior que 0. abs Compartilhar este post Link para o post Compartilhar em outros sites
kinho! 7 Denunciar post Postado Fevereiro 4, 2013 Remova os números que já foram sorteados enquanto o total for maior que 0. abs Como assim, poderia me da um exemplo ? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2013 hum... <?php $arr = range(1,100); shuffle( $arr ); foreach( $arr AS $each ) { echo $each, '<br />'; } Compartilhar este post Link para o post Compartilhar em outros sites
kinho! 7 Denunciar post Postado Fevereiro 4, 2013 hum... <?php $arr = range(1,100); shuffle( $arr ); foreach( $arr AS $each ) { echo $each, '<br />'; } Aééé, Bruno, era exatamente isso ! Agora pra min exibir cada numero de 2 em 2 segundos é dificil ? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Fevereiro 4, 2013 Com foreach é mais complicado de se fazer, então eu sugeriria usar um for-loop: <?php $arr = range(1,100); shuffle( $arr ); for( $i = 0; $i < 100; $i += 1 ) { echo $arr[ $i ], '<br />'; $i += 1; echo $arr[ $i ], '<br /><br />'; } O loop ocorre 100 vezes mas é limitado a menos que 100, porque arrays, como o gerado por range(), iniciam em zero. Se você usar algum valor que não seja fixo, como o comprimento de outro array, você troca aquele sem pela contagem de elementos. A idéia aqui é você, de certa forma, violar o controlador de iteração, re-incrementando ele dentro do próprio loop. Se preferir a sintaxe de foreach mas não quiser toda complicação que seria fazer com ele, pode usar array_chunk() para quebrar o array em pedaços de dois elementos: <?php $arr = range(1,100); shuffle( $arr ); $arr = array_chunk( $arr, 2 ); foreach( $arr AS $each ) { echo $each[ 0 ], '<br />'; echo $each[ 1 ], '<br /><br />'; } Compartilhar este post Link para o post Compartilhar em outros sites
kinho! 7 Denunciar post Postado Fevereiro 4, 2013 @Bruno Augusto Muito obrigado amigo! mais o que eu queria agora é tipo um sistema de bingo, onde cada hora o sistema me retorna um numero que ta na Array.... 1 por 1, ate chegar no ultimo! Deste já agradeço! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2013 @kinho! ai eu faria com javascript e não com php. a lógica é a mesma. Compartilhar este post Link para o post Compartilhar em outros sites
kinho! 7 Denunciar post Postado Fevereiro 4, 2013 @kinho! ai eu faria com javascript e não com php. a lógica é a mesma. Amigo eu sou meio lerdo nesse sentido, tem como voce me da um exemplo em Javascript de comi ia fikar os codigos? Deste de já agradeço pela grande ajuda que esta me dando, e peço desculpa pelo encomodo! Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 4, 2013 1. É um sistema web?? Digo isso porque ficar pausando a execução do script pode extrapolar o limite de execução do servidor e você recebe um Erro de Timeout. 2. Outro problema dos sistemas web é que você pode esbarrar no cache, tanto do servidor quanto do browser. Isso quer dizer que só haverá saída na tela depois que todo o conteúdo for recebido. Traduzindo, você ficará esperando, esperando, esperando e então recebe todos os números do bingo de uma vez só. Sem levar em conta estes dois possíveis problemas, a solução fica assim: <?php $numbers = range(1, 100); shuffle($numbers); $number = current($numbers); while (is_integer($number)) { echo $number . PHP_EOL; sleep(2); $number = next($numbers); } Um palpite pessoal: Dois segundos entre os números é muito pouco pra um bingo. Se você se deparar com o primeiro problema (timeout), você pode tentar resolver no PHP definindo a diretiva max_execution_time <?php $numbers = range(1, 100); $delay = 2; // Intervalo entre o sorteio dos números ini_set('max_execution_time', sizeof($numbers) * $delay + 10); shuffle($numbers); $number = current($numbers); while (is_integer($number)) { echo $number . PHP_EOL; sleep(2); $number = next($numbers); } Caso isso não seja suficiente, será necessário configurar seu servidor web para permitir um tempo maior. Se estiver esbarrando no segundo problema, uma possível solução é forçar a saída com flush/ob_flush <?php $numbers = range(1, 100); $delay = 2; // Intervalo entre o sorteio dos números ini_set('max_execution_time', sizeof($numbers) * $delay + 10); shuffle($numbers); $number = current($numbers); while (is_integer($number)) { echo $number . PHP_EOL; flush(); ob_flush(); sleep(2); $number = next($numbers); } Uma implementação alternativa é fazer isso via JavaScript(function () { "use strict"; var numbers, interval; Array.prototype.range = function (min, max, step) { for (step = step || 1; min <= max; min += step) { this.push(min); } return this; }; Array.prototype.shuffle = function () { var i, j, len, val; len = this.length; for (i = 0; i < len; i += 1) { j = Math.round(Math.random() * len); val = this[i]; this[i] = this[j]; this[j] = val; } return this; }; numbers = [].range(1, 100).shuffle(); function nextNumber() { if (!nextNumber.i) { nextNumber.i = 0; } if (nextNumber.i > numbers.length) { clearInterval(interval); return; } window.alert(numbers[nextNumber.i]); nextNumber.i += 1; } setInterval(nextNumber, 2000); }()); Compartilhar este post Link para o post Compartilhar em outros sites
kinho! 7 Denunciar post Postado Fevereiro 5, 2013 Era exatamente isso ! os codigos do JavaScript resolveu minha duvida ! Muito obrigado galera. Que Deus Abençoe voces que colaboraram pra responder a duvida! Compartilhar este post Link para o post Compartilhar em outros sites
Nilww 0 Denunciar post Postado Outubro 1, 2013 Manos, Legal mesmo essa alternativa em javascript! Porém tirei o Interval e mudei o alert para document.write e notei que ele gera um número 101 como "undefined". Se diminuir o range pra 15, mais "undefined" aparece. Alguém sabe como resolver? Outra coisa, tem como fazer isso de forma mais simples co menos linhas? Bom dia proceis! Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Outubro 1, 2013 Manos, Legal mesmo essa alternativa em javascript! Porém tirei o Interval e mudei o alert para document.write e notei que ele gera um número 101 como "undefined". Se diminuir o range pra 15, mais "undefined" aparece. Alguém sabe como resolver? Troque a linha que contém... if (nextNumber.i > numbers.length) { por if (nextNumber.i >= numbers.length) { Outra coisa, tem como fazer isso de forma mais simples co menos linhas? Bom dia proceis! Depende do que você precisa. O primeiro bloco: Array.prototype.range = function (min, max, step) { for (step = step || 1; min <= max; min += step) { this.push(min); } return this; }; serve para gerar o vetor com o intervalo desejado. Se você já o possui, não precisa desse pedaço. O segundo bloco Array.prototype.shuffle = function () { var i, j, len, val; len = this.length; for (i = 0; i < len; i += 1) { j = Math.round(Math.random() * len); val = this[i]; this[i] = this[j]; this[j] = val; } return this; }; é responsável por embaralhar os componentes do vetor. Novamente, se você já tem isso, não precisa deste pedaço, também. O último pedaço, que é o real responsável pela mágica, pode ser reescrito de forma mais simples, mas viola algumas das práticas de programação que eu, particularmente, sigo. Compartilhar este post Link para o post Compartilhar em outros sites