0

我尝试根据瑞士方法制作锦标赛。例如,我有 12 支球队,在每一轮中,每支球队都有积分(0 到 100)并且有赢、输或平。我想在以下条件下找到哪些球队互相比赛:

  • 按胜、平、分排序。
  • 以前不能玩。

在每一轮中,我在一个数组中为每个球队获取了可能的球队,如下所示:(键表示球队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 不能参加这一轮比赛,因为之前的比赛:

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

再次感谢!

4

0 回答 0