<?php
//Testdaten
$teams[] = ('Team1');
$teams[] = ('Team2');
$teams[] = ('Team3');
$teams[] = ('Team4');
$teams[] = ('Team5');
$teams[] = ('Team6');
$teams[] = ('Team7');
$teams[] = ('Team8');
//Settings
$saisonid = 1;
$ligaid = 1;
$anzSpielTage = 7;
$anzSpielePerTag = 4;
//Array mit allen Teams erstellen
$sql = "select * from team where ligaid = {$ligaid}";
//TODO: beim gebrauch mit der DB bei den folgenden 4 Zeilen die // entfernen
//$result = mysql_query($sql);
//while($team = mysql_fetch_array($result)){
// $teams[] = $team['vereinsname'];
//}
/**
* Funktion um den Cach-Wert eines Matches zu generieren
* @param $team1 String Name des Heimteams
* @param $team2 String Name des Auswertsteams
* @return String Cach-Wert team###team
*/
function createMatchCachEntry($team1,$team2){
return MIN($team1,$team2).'###'.MAX($team1,$team2);
}
/**
* Funktion um matches auszufiltern, von denen an diesem Tag bereits ein Team gespielt hat
* @param $key int IndexKey des Matches
* @return Boolean
*/
function dayFilter($key){
global $dayCache;
global $matches;
return !(in_array($matches[$key][0], $dayCache) || in_array($matches[$key][1], $dayCache));
}
//alle möglichen Matches definieren
$cachMatches = array();
foreach($teams as $team1){
foreach($teams as $team2){
//Prüfen dass die Manschaft nicht gegen sich selber spielt und dass der Match noch nicht exisitiert
if($team1 != $team2 && !in_array(createMatchCachEntry($team1,$team2), $cachMatches)){
$cachMatches[] = createMatchCachEntry($team1,$team2);
$matches[] = array(min($team1, $team2), max($team1, $team2));
}
}
}
//Schleife die solange durchgeht, bis ein vollständiges Set erstellt werden konnte
do{
echo "#### Durchgang ".++$cnt." ####<br />\n",
$notValidSetFlag = false;
$matchSqls = array();
//Index der mathces erstellen
$index = array_keys($matches);
//Jeden Spieltag durchgehen
for($spieltag = 1; $spieltag <= $anzSpielTage; $spieltag++){
//TeamCach für den Tag
$dayCache = array();
//Kopie des Restindex erstellen
$dayIindex = $index;
//Die Matchs mischen
shuffle($dayIindex);
//Anazahl Spiele pro Tag oder Anzahl üpbrige Matches durchgehen
echo "Tag: {$spieltag}<br />\n";
for($i=0; $i < min($anzSpielePerTag, count($index)); $i++){
//Den obersten Match aus der Leiste nehmen
$key = array_shift($dayIindex);
//prüfen ob ein key ausgelesen werden konnt
//Ansonsten abbrechen und neu beginnen
if(is_null($key)){
echo "#### break #### -> Neu starten ################################<br />\n";
$notValidSetFlag=true;
break 2;
}
//Match aus dem Index austragen
unset($index[array_search($key, $index)]);
//Mischen wer die Heimmanschaft ist
$match = $matches[$key];
shuffle($match);
//SQL-Insert-Teil zusammensetzen
$matchSqls[] = "('{$spieltag}','{$saisonid}','{$ligaid}','{$match[0]}','{$match[1]}')";
//Teams in den Tagescahce eintragen
$dayCache[] = $match[0];
$dayCache[] = $match[1];
//Indexe ausfiltern, so dass nur noch die Indexe der Matches vorhanden sind, die
//noch heute noch nicht gespielt haben
$dayIindex = array_filter($dayIindex, 'dayFilter');
echo "Spiel {$i}: {$match[0]}::{$match[1]}<br />\n";
}
echo "<hr />\n";
//Wenn alle Matches eingeteilt sind, alles abbrechen
if(count($index)==0){ break 2; }
}
}while($notValidSetFlag);
//Die Matches mit einem einzigen DB-Zugriff eintragen
//TODO: beim gebrauch mit der DB bei der folgenden Zeile die // entfernen
$sql = "INSERT INTO spieltage (spieltag,saisonid,ligaid,hteam,ateam) VALUES ".implode(',', $matchSqls);
//mysql_query($sql);
?>