mDd-nightmare
Grünschnabel
Hallo Leute,
ich hab folgendes Problem:
Und zwar bleibe ich irgendwie bei der Genierung der Paarungen in einem Liga-System stecken.
Die Genierung der einzelnen Paarungen ist ansich kein Problem, nur gibt es ein bestimmtes Kriterieum, das beachtet werden muss: Jedes Team darf nur einmal pro Woche spielen.
Das Problem ist immer, dass das TeamArray angeblich keine passenden Teams mehr hat um passende Paarungen erstellen zu können.
Eckdaten des Scripts:
Nun ja, ich hoffe, das Problem ist gut geschildert!
Vieleicht kann mir jemand einen kleinen Denkanstoß geben, wo mein Fehler liegt!
greetz
nightmare aka christian
PS: Die Eckdaten sind jetzt nur passend auf das Beispiel bezogen. Im richtigen Script können das alles Zufallszahlen sein. Es soll mir eben alles automatisch genieren.
ich hab folgendes Problem:
Und zwar bleibe ich irgendwie bei der Genierung der Paarungen in einem Liga-System stecken.
Die Genierung der einzelnen Paarungen ist ansich kein Problem, nur gibt es ein bestimmtes Kriterieum, das beachtet werden muss: Jedes Team darf nur einmal pro Woche spielen.
Das Problem ist immer, dass das TeamArray angeblich keine passenden Teams mehr hat um passende Paarungen erstellen zu können.
Eckdaten des Scripts:
- Liga-System (keine Rückrunde)
- 10 Teams (kommt eben auf die Anmeldungen an)
- macht 45 Paarungen
- 9 Wochen Spielzeit (1 Spiel pro Woche pro Team) und
- 5 Spiele pro Woche
PHP:
/* genieren der teams (normal aus datenbank....) */
class Team {
var $id = null;
var $name = null;
function Team ($id)
{
$this->id = $id;
$this->name = "Team_".$id;
}
}
for($i=1; $i<=10; $i++)
$teams[] = new Team($i);
/* ende.... */
/* zweite array mit gleichen teams zur genierung der paarungen (keine andere lösung) */
$teams2 = $teams;
shuffle($teams);
shuffle($teams2);
$numTeams = count($teams);
$weeks = count($teams)-1;
//$this->BuildRunden($weeks);
// wieviele paarungen gibt es?
$numPaarungen = $numTeams*($numTeams-1)/2;
// wieviel Matche pro woche?
$MatchPerWeek = $numPaarungen / $weeks;
$tmp = explode(".",$MatchPerWeek); // fals ne komma zahl
$ungerade = $tmp[1] > 0 ? 1 : 0;
//false ne komma zahl -> plus eins.. und letzte woche nur 1 Spiel stat $MatchPerWeek....
$MatchPerWeek = $ungerade ? $tmp[0]+1 : $MatchPerWeek;
echo "<div style='text-align: left'>";
$z=0;
$round = array();
for($i=0; $i<$weeks; $i++) // wochen durchgehen....
{
echo "---- $i. Woche -------------<br>";
$round[$i] = array();
for($r=0; $r<$MatchPerWeek; $r++) // matche/woche
{
if($ungerade && $i == $weeks-1) // wenn $ungerade dann ist in der letzten woche nur ein spiel...
$r=$MatchPerWeek;
foreach($teams as $team) // erste team array....
{
foreach($teams2 as $vs_team) // zweite team array
{
if($team->id != $vs_team->id) // nur wenn gegner unterschiedlich
{
foreach($round[$i] as $rr) // erstellte runden prüfen ob Team schon in woche drin?
{
if($rr[0] == $team->id || $rr[1] == $team->id || $rr[0] == $vs_team->id || $rr[1] == $vs_team->id)
{
$no = true;
break;
}else
$no = false;
}
if(!$no) {
foreach($round as $rr)
{
foreach($rr as $_rr)
{
// prüfen ob paarung in der form schon exitiert oder anderen...
if($_rr[0] == $team->id && $_rr[1] == $vs_team->id)
{
$no_NO = true;
break;
}elseif($_rr[0] == $vs_team->id && $_rr[1] == $team->id) {
$no_NO = true;
break;
}else
$no_NO = false;
}
if($no_NO) break;
}
// nur wenn prüfungen alle false geben....
// (wenn Team nur einmal in Woche vorkommt
// und paarung nicht existiert...)
if(!$no_NO) {
$round[$i][$r][0] = $team->id;
$round[$i][$r][1] = $vs_team->id;
echo " ".$team->id." vs ".$vs_team->id."<br>";
$set = true;
break;
}else
$set = false;
}else
$set = false;
}
} // ende foreacch team2 array
if($set) break;
} // ende foreach team array
if(!$set)
echo "kein match mehr möglich für diese woche laut array... :(<br>";
reset($teams);
reset($teams2);
}
}
echo "</div><br>";
Nun ja, ich hoffe, das Problem ist gut geschildert!
Vieleicht kann mir jemand einen kleinen Denkanstoß geben, wo mein Fehler liegt!
greetz
nightmare aka christian
PS: Die Eckdaten sind jetzt nur passend auf das Beispiel bezogen. Im richtigen Script können das alles Zufallszahlen sein. Es soll mir eben alles automatisch genieren.