Ir para conteúdo

Arquivado

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

Hulkstar

gerar sistema php

Recommended Posts

Fazendo uma pesquisa na internet,eu achei um código que gera confrontos de futebol,o sistema serviria de caminho para o projeto que eu pretendo fazer de futebol,só que se tiver mais de 10 times,trava para gerar os confrontos,e acaba não gerando,saberiam me dizer o que posso estar fazendo para ajustar o script.

<?php
$times = array('Time 01','Time 02','Time 03','Time 04','Time 05','Time 06','Time 07','Time 08','Time 09','Time 10','Time 11','Time 12','Time 13','Time 14','Time 15','Time 16','Time 17','Time 18','Time 19','Time 20');

function gera_jogos($times) {
    $num_times = count($times);
    $jogo = array();
    foreach ($times as $k => $m) {

    for($i = $k+1;$i < count($times);$i++) {
		$v = $times[$i];
            if ($m != $v AND !in_array(array('m' => $v, 'v' => $m), $jogo)) {
                $jogo[] = array('m' => $m, 'v' => $v);
            }
        }
    }
 
    $rodada = array();
    $times_usados = array();
    $jogos_usados = array();
 
    $num_rodadas = $num_times - 1;
    $num_jogos = $num_times * $num_rodadas / 2;
    $num_jogos_realizados = 0;
 
    $rodada = array();
    shuffle($jogo);
    for ($i = 1; $i <= $num_rodadas; $i++) {
        foreach ($jogo as $c => $j) {
            if (!in_array($j['v'], $times_usados) AND !in_array($j['m'], $times_usados) AND !in_array($j, $jogos_usados)) {
                $rodada[$i][] = $j;
 
                $times_usados[] = $j['v'];
                $times_usados[] = $j['m'];
 
                $jogos_usados[] = $j;
 
                $num_jogos_realizados++;
            }
        }
 
        $times_usados = array();
    }
   
    if ($num_jogos_realizados == $num_jogos) {
        return $rodada;
    } else {
        return false;
       
        $tentativa++;
    }
}
 
$rodada = array();
 
while ($rodada == false) {
    $rodada = gera_jogos($times);
    $tentativa++;
}
 
foreach ($rodada as $c => $v) {
    echo "<h2>Rodada $c</h2>";
    foreach ($v as $i) {
        echo $i['m'], ' x ', $i['v'], '<br />';
    }
}
?> 


Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu também não sei o que acontece,quando tem até 10 times,gera a lista tranquilamente,agora quando tem 18 times ou mais,a lista não gera,o sistema fica pesado.

Eu preciso que a lista gerasse tranquilamente com 10,20 ou 30 times.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que você tentou, quer que façamos o teste pra você e corrija o script é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade eu queria uma ajuda para tentar descobrir o por que o script quando tem até 14 times funciona corretamente,quando se tem mais de 14 times,o script já não funciona,até dar erro por tempo de espera.

Por que eu já fiz algumas mudança no script para ver se conseguia resolver o problema,mais continua a mesma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas velho pegar script da net da nisso, isso ae se voce estudar array, resolve com duas a tres linhas, depois so usar um for para percorrer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue Boy, como eu disse em poucas linhas, agora estude as funções!

$times = array('Time 01','Time 02','Time 03','Time 04','Time 05','Time 06','Time 07','Time 08','Time 09','Time 10','Time 11','Time 12','Time 13','Time 14','Time 15','Time 16','Time 17','Time 18','Time 19','Time 20');

function gera_jogos($times) {
    shuffle($times);
    return call_user_func_array('array_combine', array_chunk($times, sizeof($times) / 2));
}

for ($i = 0; $i < count($times); $i += 1) {
    echo "<pre>";
    print_r(gera_jogos($times));
}

Veja o Ideone

http://ideone.com/LIiIlV

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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