Does anyone know how I can split an array into groups of two, without any group(team in this case) meeting eachother again till running out of possibilities?
array [ 0, 1, 2, 3, 4, 5 ]
Does anyone know how I can split an array into groups of two, without any group(team in this case) meeting eachother again till running out of possibilities?
array [ 0, 1, 2, 3, 4, 5 ]
This is definitely not the optimal way to do this, please optimize it yourself (this will work for only even number of teams):
<?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;
}
?>