sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag skapa en round robin-turnering i PHP och MySQL?

Jag skapade en roundrobin-funktion från grunden eftersom jag trodde att det kunde vara lättare att få samma resultat och att jag även kunde använda arrayer fyllda med strängar direkt istället för siffror.

Eftersom jag hämtar en lista med namn från en databas och lägger till i en array kan jag nu schemalägga detta direkt med funktionen nedan. Inget extra steg behövs för att länka nummer till namn etc.

Vänligen testa det och om det fungerar lämna en kommentar. Jag har också en version som tillåter tvåvägs (hem &retur) schema och eller blanda alternativ. Om någon är intresserad av den, lämna en kommentar också.

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

Hur man använder, till exempel skapa en array som:

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

eller

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

anropa sedan funktionen för att skapa ditt schema baserat på ovanstående array:

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

För att visa det resulterande arrayschemat gör helt enkelt som nedan eller hur du vill:Den här lilla koden visar schemat i ett snyggt format men använd det hur som helst.

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

Lämna ett meddelande om det fungerade för dig eller om du är intresserad av 2-vägsversionen med shuffle.



  1. Min DBA är sjuk - Databas Failover Tips för SysAdmins

  2. Bästa metoder för MySQL-replikering

  3. Hur kan jag aktivera MySQL:s långsamma frågelogg utan att starta om MySQL?

  4. Anropar Oracles lagrade procedur med utdataparameter från SQL Server