我尝试根据瑞士方法制作锦标赛。例如,我有 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 不能参加这一轮比赛,因为之前的比赛:
我不知道如何解决这个问题。
再次感谢!