Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso generare un torneo all'italiana in PHP e MySQL?

Ho creato una funzione roundrobin da zero perché pensavo che potesse essere più facile ottenere gli stessi risultati e permettermi anche di utilizzare array pieni di stringhe direttamente invece di numeri.

Poiché estraggo un elenco di nomi da un database e lo aggiungo a un array, ora posso programmarlo direttamente con la funzione sottostante. Nessun passaggio aggiuntivo necessario per collegare i numeri ai nomi, ecc.

Sentiti libero di provarlo e se funziona, lascia un commento. Ho anche una versione che consente la pianificazione a 2 vie (casa e ritorno) e l'opzione shuffle. Se qualcuno è interessato a quello, lascia anche un commento.

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

Come utilizzare, ad esempio creare un array come:

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

o

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

quindi chiama la funzione per creare il tuo programma in base all'array sopra:

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

Per visualizzare la pianificazione dell'array risultante, fai semplicemente come di seguito o come preferisci:Questo piccolo codice mostra la pianificazione in un bel formato ma usala come preferisci.

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

Lascia una nota se ha funzionato per te o se sei interessato alla versione a 2 vie con shuffle.