我有球员之间的比赛表,有字段:
身份证 | player1_id | player2_id | 得分P1 | 分数 P2 | 阶段
1 | 假人1 | 假人2 | 2 | 3 | 第16轮
2 | 随机2 | 测试1 | 2 | 1 | 第16轮
3 | 假人2 | 假人1 | 1 | 1 | 第16轮
4 | 测试1 | 随机2 | 2 | 3 | 第16轮
5 | 随机2 | 假人2 | 1 | 1 | 第8轮
6 | 假人2 | 随机2 | 1 | 3 | 第8轮
现在阶段的值是 ROUND16、ROUND8、ROUND4、ROUND2、FINAL。这些值代表锦标赛的阶段。现在,我将每个阶段的比赛分组。玩家之间的每场比赛发生两次,一次是“主场”,另一次是“客场”。例如,player Dummy 曾经在 player1_id 下,其他时间在 player2_id 下。
这就是我将比赛分组为阶段组的方式。
$matches=Match::where('stage','ROUND_OF_16')->get();
$stages = $matches->mapToGroups(function ($item, $key) {
return [$item['stage'] => $item];
});
现在我想做的是将这两场比赛组合在一个组 ROUND16 中。所以我会得到小组和配对比赛的内部小组。问题是玩家一次在 player1_id 下,另一次在 player2_id 下,所以我不知道如何将这两个匹配组合在一起。
最终结果:
第16轮{
[0]{
[id:1,player1_id:dummy1,player2_id:dummy2]
[id:3,player1_id:dummy2,player2_id:dummy1]
}
[1]{
[id:2,player1_id:random2,player2_id:test1]
[id:4,player1_id:test1,player2_id:random2]
}
}
第8轮{
[0]{
[id:5,player1_id:random2,player2_id:dummy2]
[id:6,player1_id:dummy2,player2_id:random2]
}
}