-2
A
回答
0
这绝对不是要做到这一点的最佳方式,请你自己优化它(这将仅偶数队的工作):
<?php
$allTeams = [0,1,2,3,4,5];
$everyGames = [];//Append team matches to this
foreach($allTeams as $team1){
foreach($allTeams as $team2){
if (!in_array([$team2, $team1], $everyGames)
&& $team2 !== $team1) {
$everyGames[] = [$team1, $team2];
}
}
}
$copyOfEveryGames = $everyGames;
$needToLoopAgain = true;
while($needToLoopAgain){
$allRounds = [];
$needToLoopAgain = false;
$everyGames = $copyOfEveryGames;
shuffle($everyGames);//Shuffle it for the random array
while(count($everyGames) > 0){
$allMatches = [];
$tempEveryGames = $everyGames;
for($i = 0; $i < count($allTeams)/2; $i++){
foreach($tempEveryGames as $key => $game){
if(!(in_array_r($game[0], $allMatches) || in_array_r($game[1], $allMatches))){
$allMatches[] = $game;
unset($tempEveryGames[$key]);
break;
}
}
}
if(count($allMatches) === count($allTeams)/2){
$everyGames = $tempEveryGames ;
$allRounds[] = $allMatches;
}else{
$needToLoopAgain = true;
break;
}
}
if(count($allRounds) !== count($allTeams) -1){
$needToLoopAgain = true;
}
}
//Display Example
foreach($allRounds as $round){
print_r($round);
echo "<br>";
}
/*
Example Output:
Array ([0] => Array ([0] => 0 [1] => 3)
[1] => Array ([0] => 1 [1] => 4)
[2] => Array ([0] => 2 [1] => 5))
Array ([0] => Array ([0] => 0 [1] => 2)
[1] => Array ([0] => 4 [1] => 5)
[2] => Array ([0] => 1 [1] => 3))
Array ([0] => Array ([0] => 1 [1] => 2)
[1] => Array ([0] => 3 [1] => 4)
[2] => Array ([0] => 0 [1] => 5))
Array ([0] => Array ([0] => 1 [1] => 5)
[1] => Array ([0] => 0 [1] => 4)
[2] => Array ([0] => 2 [1] => 3))
Array ([0] => Array ([0] => 0 [1] => 1)
[1] => Array ([0] => 2 [1] => 4)
[2] => Array ([0] => 3 [1] => 5))
*/
//Copied from http://stackoverflow.com/questions/4128323/in-array-and-multidimensional-array
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
?>
0
我希望这会回答你的问题,如果我很好地理解你的问题。
function againstWho(array $teams) : array{
$fixture = null;
foreach($teams as $key => $team){
unset($teams[$key]);
$fixture[$team] = $teams;
$teams[] = $team;
}
return $fixture;
}
// EXAMPLE
$teams = ['MANU', 'ARS', 'LIV', 'CHE', 'MANC'];
foreach (againstWho($teams) as $team => $fixtures){
echo "$team will face ";
foreach ($fixtures as $key => $rival){
echo "$rival, ";
}
echo "<br />";
}
// Her's what gets printed
/*
MANU will face ARS, LIV, CHE, MANC,
ARS will face LIV, CHE, MANC, MANU,
LIV will face CHE, MANC, MANU, ARS,
CHE will face MANC, MANU, ARS, LIV,
MANC will face MANU, ARS, LIV, CHE
*/
相关问题
- 1. 随机洗牌数组
- 2. 随机随机洗牌C++数组(每次不同)
- 3. 随数组中包含的最高数字随机洗牌
- 4. 随机洗牌在PHP?
- 5. 洗牌.txt文件随机
- 6. 列的随机洗牌
- 7. 无法随机洗牌
- 8. 洗牌的随机化
- 9. N-Puzzle伪随机洗牌?
- 10. 随机洗牌列表
- 11. C++向量随机随机洗牌的一部分
- 12. 随机洗牌和函数指针
- 13. 需要使用密钥的可重复的随机数组随机洗牌
- 14. 创建一个部分洗牌的随机数排序列表
- 15. 在Python中随机化/洗牌列表/数组?
- 16. 随机分区与分区然后洗牌
- 17. 洗牌列表中随机的Java
- 18. 随机洗牌错误信息
- 19. 与jQuery堆栈随机化/洗牌卡
- 20. 随机洗牌<table>列
- 21. 从资源随机洗牌文本
- 22. 随机洗牌的值的网格?
- 23. 随机洗牌列除第一列
- 24. 如何随机随机洗牌地图中的值?
- 25. 随机随机洗牌列表变为无
- 26. 在Python中随机随机洗牌的键和值DIctionary
- 27. 如何在Python中进行随机但部分洗牌?
- 28. 测试卡牌洗牌机
- 29. 洗牌在Objective-C数组
- 30. 如何洗牌数组值
请说明你已经做了什么来尝试解决这个问题。 –