sql >> データベース >  >> RDS >> Mysql

PHPとMySQLでラウンドロビントーナメントを生成するにはどうすればよいですか?

    同じ結果を得る方が簡単で、数値の代わりに文字列で埋められた配列を直接使用できるようになると思ったので、ラウンドロビン関数を最初から作成しました。

    データベースから名前のリストを取得して配列に追加するので、以下の関数を使用してこれを直接スケジュールできます。番号を名前などにリンクするための追加の手順は必要ありません。

    気軽に試してみて、うまくいったらコメントを残してください。2ウェイ(ホーム&リターン)スケジュールやシャッフルオプションもあるバージョンもあります。誰かがそれに興味を持っているなら、コメントも残してください。

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

    使用方法、たとえば次のような配列を作成します:

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

    または

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

    次に、関数を呼び出して、上記の配列に基づいてスケジュールを作成します。

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

    結果の配列スケジュールを表示するには、以下のように、またはとにかく好きなようにします。この小さなコードは、スケジュールを素敵な形式で表示しますが、好きなように使用します。

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

    それがうまくいった場合、またはシャッフル付きの2ウェイバージョンに興味がある場合は、メモを残してください。



    1. MySQLの複数のWhere句

    2. Django-DB-移行:保留中のトリガーイベントがあるため、テーブルを変更できません

    3. Oracleパーティションインデックス

    4. 結果を表示せずにSQLクエリを実行する方法