首页 / PHP / php – 如何在循环赛中匹配对?
php – 如何在循环赛中匹配对?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何在循环赛中匹配对?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1602字,纯文字阅读大概需要3分钟。
内容图文
我正在制作一个锦标赛应用程序,其中许多(4,6或8)玩家将相互匹配.
它是圆形的.因此,如果总共有6名玩家,那么将有5轮,每轮3对.每个玩家每轮只能出现一次.
我尝试了什么
我一直在使用for循环来获得所需的组合,但是我如何将这些组分成几轮以便它们不重复?这是我到目前为止所做的(制作每个组合):
<?php
$players = [1,2,3,4,5,6];
for($i = 0; $i < count($players); $i++):
for($j = 0; $j < $i; $j++):
$pair1 = $players[$j];
$pair2 = $players[$i];
$pairs[] = $pair1.$pair2;
endfor;
endfor;
/* Output:
[
0 => "12"
1 => "13"
2 => "23"
3 => "14"
4 => "24"
5 => "34"
6 => "15"
7 => "25"
8 => "35"
9 => "45"
10 => "16"
11 => "26"
12 => "36"
13 => "46"
14 => "56"
]*/
我的问题
有没有通用的方法将对子分配成轮次,没有球员在同一回合中出现多次?
例
>第一轮:12,34,56;
>第二轮:13,25,46 ……
解决方法:
你可以使用这段代码.它基于the scheduling algorithm for round robin:
$players = [1,2,3,4,5,6];
$n = count($players);
for ($r = 0; $r < $n - 1; $r++) {
for ($i = 0; $i < $n / 2; $i++) {
$rounds[$r][] = [$players[$i], $players[$n-1 - $i]];
}
// Perform round-robin shift, keeping first player in its spot:
$players[] = array_splice($players, 1, 1)[0];
}
// shift once more to put array in its original sequence:
$players[] = array_splice($players, 1, 1)[0];
请注意,这会将对子放入子数组中.将它们连接成字符串并不是一个好主意,因为这会使得再次从它们中提取单个数字变得更加困难.
上面的代码运行后,数组$rounds是:
[
[[1,6],[2,5],[3,4]]
[[1,2],[3,6],[4,5]]
[[1,3],[4,2],[5,6]]
[[1,4],[5,3],[6,2]]
[[1,5],[6,4],[2,3]]
]
在循环中发生的循环移位可以这样显示,其中阵列被“折叠”到中途以显示谁与谁配对(在列中):
玩家1从不移动,位置2处的玩家被从阵列中切出,并被推到阵列的末端,这意味着它将到达位置6.
内容总结
以上是互联网集市为您收集整理的php – 如何在循环赛中匹配对?全部内容,希望文章能够帮你解决php – 如何在循环赛中匹配对?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。