sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo generar un torneo round robin en PHP y MySQL?

Creé una función roundrobin desde cero porque pensé que podría ser más fácil obtener los mismos resultados y también permitirme usar matrices llenas de cadenas directamente en lugar de números.

Debido a que extraigo una lista de nombres de una base de datos y la agrego a una matriz, ahora puedo programar esto directamente con la siguiente función. No se necesita ningún paso adicional para vincular números a nombres, etc.

No dude en probarlo y, si funciona, deje un comentario. También tengo una versión que permite el horario de 2 vías (casa y regreso) o la opción aleatoria. Si alguien está interesado en eso, también deje un comentario.

<?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;
}
?>

Cómo usar, por ejemplo, crear una matriz como:

<?php $members = array(1,2,3,4); ?>

o

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

luego llame a la función para crear su horario basado en la matriz anterior:

<?php $schedule = scheduler($members); ?>

Para mostrar el cronograma de la matriz resultante, simplemente haga lo siguiente o de la forma que desee:este pequeño código muestra el cronograma en un formato agradable, pero utilícelo de la forma que desee.

<?php
foreach($schedule AS $round => $games){
    echo "Round: ".($round+1)."<BR>";
    foreach($games AS $play){
        echo $play["Home"]." - ".$play["Away"]."<BR>";
    }
    echo "<BR>";
}
?>

Deje una nota si funcionó para usted o si está interesado en la versión bidireccional con reproducción aleatoria.