Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso gerar um torneio round robin em PHP e MySQL?


Eu criei uma função roundrobin do zero, pois pensei que poderia ser mais fácil obter os mesmos resultados e também me permitir usar arrays preenchidos com strings diretamente em vez de números.

Como eu puxo uma lista de nomes de um banco de dados e adiciono a uma matriz, agora posso agendar isso diretamente com a função abaixo. Nenhuma etapa extra necessária para vincular números a nomes etc.

Por favor, sinta-se à vontade para experimentá-lo e se funcionar, deixe um comentário. Eu também tenho uma versão que permite programação de 2 vias (casa e retorno) e ou opção aleatória. Se alguém estiver interessado nisso, deixe um comentário também.
<?php

/**
 * @author D.D.M. van Zelst
 * @copyright 2012
 */

function scheduler($teams){
    if (count($teams)%2 != 0){
        array_push($teams,"bye");
    }
    $away = array_splice($teams,(count($teams)/2));
    $home = $teams;
    for ($i=0; $i < count($home)+count($away)-1; $i++){
        for ($j=0; $j<count($home); $j++){
            $round[$i][$j]["Home"]=$home[$j];
            $round[$i][$j]["Away"]=$away[$j];
        }
        if(count($home)+count($away)-1 > 2){
            array_unshift($away,array_shift(array_splice($home,1,1)));
            array_push($home,array_pop($away));
        }
    }
    return $round;
}
?>

Como usar, por exemplo, crie um array como:
<?php $members = array(1,2,3,4); ?>

ou
<?php $members = array("name1","name2","name3","name4"); ?>

em seguida, chame a função para criar sua programação com base na matriz acima:
<?php $schedule = scheduler($members); ?>

Para exibir o agendamento da matriz resultante, simplesmente faça como abaixo ou da maneira que desejar:Este pequeno código exibe o agendamento em um formato agradável, mas use-o da maneira que desejar.
<?php
foreach($schedule AS $round => $games){
    echo "Round: ".($round+1)."<BR>";
    foreach($games AS $play){
        echo $play["Home"]." - ".$play["Away"]."<BR>";
    }
    echo "<BR>";
}
?>

Deixe uma nota se funcionou para você ou se você está interessado na versão de 2 vias com shuffle.