瑞士锦标赛。团队对抗多轮没有重复和有序

时间:2018-05-22 09:38:33

标签: php tournament

我尝试根据瑞士方法进行锦标赛。 我有12支球队,每轮比赛中,每支球队都有得分(0比100),胜利,失败或平局。 我希望找到哪些球队相互比较,具备以下条件:

  • 以胜利,平局和积分排序。
  • 以前没有播放过。

在每一轮比赛中,我让foreach团队成为可能的球队,在这样的阵列中进行对战:(关键表示球队ID,值表示可能的球队以“,”分开)

[2] => 4,11,6,10,3,8,7,12,
[5] => 4,11,9,10,3,8,1,12,
[4] => 2,5,6,10,8,7,12,
[11] => 5,9,10,3,8,7,
[9] => 5,11,6,3,8,7,12,
[6] => 2,4,9,10,3,7,12,
[10] => 2,5,4,11,6,8,7,12,
[3] => 5,11,9,6,8,7,
[8] => 2,5,4,11,9,10,3,1,12,
[7] => 2,4,11,9,6,10,3,1,12,
[1] => 5,4,11,9,6,3,8,7,
[12] => 2,5,4,9,6,10,8,7,

首先,我让所有球队都参加了比赛:(键表示球队ID)

Array (
    [1] => 2,10,12,
    [2] => 1,9,5,
    [3] => 4,12,10,
    [4] => 3,11,9,
    [5] => 6,7,2,
    [6] => 5,8,11,
    [7] => 8,5,8,
    [8] => 7,6,7,
    [9] => 10,2,4,
    [10] => 9,1,3,
    [11] => 12,4,6,
    [12] => 11,3,1, )

然后,我得到所有球队的胜利,输球和分数排序:(键表示队友ID)

Array
(
    [1] => 2
    [2] => 5
    [3] => 4
    [4] => 11
    [5] => 9
    [6] => 6
    [7] => 10
    [8] => 3
    [9] => 8
    [10] => 7
    [11] => 1
    [12] => 12
)

最终我试图找到可能与两支球队的比赛。

$checks = array();
$pairs = array();
for ($i = 1; $i <= count($list); $i++) {
    for ($j = 1; $j <= count($list); $j++) {
        if(strpos($plays[$list[$i]], $list[$j]) !== false || $list[$i] == $list[$j] ) {
        }else{
            if(!in_array($list[$i],$checks) && !in_array($list[$j],$checks)){
                $pairs[] = $list[$i].",".$list[$j];
                $checks[] = $list[$i];
                $checks[] = $list[$j];
            }
        }
    }
}

最后我打印数组“$ pairs”。它显示:

Array
(
    [0] => 2,4
    [1] => 5,11
    [2] => 9,6
    [3] => 10,8
    [4] => 3,7
)

多数民众赞成不正确,因为team_id 1和team_id 12无法在本轮比赛中发挥,因为之前发挥过:

我不知道如何解决这个问题。

再次感谢!

0 个答案:

没有答案