PHP: Berechung von Baumdarstellung mit <table> & PHP
-
Wie wärs wenn du mal einen Entwickler eines solchen Systems fragst?
das hab ich natürlich als erstes getan
DIe ANtworten sind immer gleich: "Hmm das ist ein riesen scheiss das zu machen, ich kann dir auch nicht genau sagen wie das geht" O_ohier noch ein anderes Beispiel. Das ist 100% mit Tabellen gelöst:
http://www.kepler2004.de/bilder/treeview.jpgalso die <tr> sind dann Teamanzahl * 2, und dann quasi immer in die Lücken "gefüllt"
-
Klar, wenn sich die Boxen nicht überschneiden kannst du es auch so machen - sollte doch eigentlich gar nicht so schwer sein
-
hm tja, das hab ich mir auch gedacht, das war vor ca. 8-10 Wochen
Event. kannst du mir ja einen Denkanstoß o.ä. geben ?
-
Wenn du es unbedingt über eine Tabelle machen willst könntest du dir z.B. erst ein Array mit der entsprechenden Breite und Höhe (Manschaften + Zwischenräume) anlegen und dann die Daten aus der DB auslesen und in der entsprechenden Position des Arrays eintragen. Anschließend eben noch dieses Array entsprechend ausgeben
-
also ich bins mal wieder
Ich habs jetzt wohl mal soweit geschafft, einen normalen Baum richtig auszugeben. Allerdings hab ich für die linke Seite noch nix brauchbares basteln können. Eventuell kann sich ja hier mal jemand den Code anschaun und rumprobieren ?<?php function gameinfo($team_1 = "xXx", $team_2 = "xXx") { $gameinfo .= "<table width=\"70\" height=\"50\" cellspacing=\"0\" border=\"1\">"; $gameinfo .= " <tr><td align=\"center\">".$team_1."</td></tr>"; $gameinfo .= " <tr><td align=\"center\">vs.</td></tr>"; $gameinfo .= " <tr><td align=\"center\">".$team_2."</td></tr>"; $gameinfo .= "</table>"; return $gameinfo; } $teams = 16; $teams = $teams/2; $rounds = log($teams)/log(2); $y_max = $teams*2-1; $x_max = $rounds*2+1; echo "<table border=0 cellpadding=0 cellspacing=0><tr>\n"; for($i=1;$i<=$x_max;$i++) { echo ($i%2) ? "<td width=70 align=center><b>round ".++$round."</b></td>" : "<td width=70> </td>"; } echo "</tr></table><br>"; for($x = 1; $x <= $x_max; $x++) { for($y = 1;$y <= $y_max; $y++) { # Runde 1 if($x == 1 && $y%2) { $match[$x][$y] = gameinfo(); } # Runde 2 if($x == 3 && $y%2 == false && ++$temp2%2) { $match[$x][$y] = gameinfo();; for($i=$y-1; $i <= $y+1; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-1] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+1] = "<img src=\"right_up.gif\">"; } # Runde 3 if($x == 5 && $y%4 == false && ++$temp3%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-2; $i <= $y+2; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-2] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+2] = "<img src=\"right_up.gif\">"; } # Runde 4 if($x == 7 && $y%8 == false && ++$temp4%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-4; $i <= $y+4; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-4] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+4] = "<img src=\"right_up.gif\">"; } # Runde 5 if($x == 9 && $y%16 == false && ++$temp5%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-8; $i <= $y+8; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-8] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+8] = "<img src=\"right_up.gif\">"; } # Runde 6 if($x == 11 && $y%32 == false && ++$temp6%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-16; $i <= $y+16; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-16] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+16] = "<img src=\"right_up.gif\">"; } # Runde 7 if($x == 13 && $y%64 == false && ++$temp7%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-32; $i <= $y+32; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-32] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+32] = "<img src=\"right_up.gif\">"; } # Runde 8 if($x == 15 && $y%128 == false && ++$temp8%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-64; $i <= $y+64; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-64] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+64] = "<img src=\"right_up.gif\">"; } # Runde 9 if($x == 17 && $y%256 == false && ++$temp9%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-128; $i <= $y+128; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-128] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+128] = "<img src=\"right_up.gif\">"; } # Runde 10 if($x == 19 && $y%512 == false && ++$temp10%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-256; $i <= $y+256; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-256] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+256] = "<img src=\"right_up.gif\">"; } # Runde 11 if($x == 21 && $y%1024 == false && ++$temp11%2) { $match[$x][$y] = gameinfo();; $match[$x-1][$y] = "<img src=\"middle.gif\">"; for($i=$y-512; $i <= $y+512; $i++) { $match[$x-1][$i] = "<img src=\"up.gif\">"; } $match[$x-1][$y-512] = "<img src=\"right_down.gif\">"; $match[$x-1][$y] = "<img src=\"middle.gif\">"; $match[$x-1][$y+512] = "<img src=\"right_up.gif\">"; } } } // ausgabe echo "<table border=0 cellpadding=0 cellspacing=0>\n"; for($y = 1;$y <= $y_max; $y++) { echo "<tr>"; for($x = 1; $x <= $x_max; $x++) { if($match[$x][$y]) { echo " <td width=70 align=center>".$match[$x][$y]."</td>\n"; } else { echo " <td width=50> </td>\n"; } } echo "</tr>\n"; } echo "</table>\n"; ?>
-
Du meinst für die Loser-Runde? Ist doch vom Prinzip her auch nichts anderes
-
ja, aber natürlich ist die anders!
Es kommen ja je Runde immer neue Teams von rechts dazu. Und ich hab den mathematischen Zusammenhang zw. Runden & Teams auf der linken Seite gefunden.
-
Irgendwie verstehe ich das Problem nicht ganz. Du hast in der Mitte die Ausgangs-Mannschaften und bei jedem Match kommt eine Mannschaft nach links und die andere nach rechts´. Wo ist da vom Prinzip her der Unterschied zwischen links und rechts
-
hm also:
wer rechts verliert, kommt in die entsprechende Runde auf der linken Seite wieder rein. Die, die schon links sind und dann nochmal dort verlieren, die fliegen dann komplett raus.
d.h. wenn ich in Runde -1 (linke Seite = negativ) 4 Teams schon hab, dann kommen dazu nochmal z.B. 2 Teams dazu die rechts verloren haben. Das lässt sich auf dem 2. Link/Bild das ich gepostet hab gut erkennen.
Deswegen heisst das auch "Double-Elimination", man ist erst ausgeschieden wenn man 2mal verloren hat (also links zum 2ten Mal verliert).Also verhält sich die linke Seite NICHT wie die rechte, die rechte lässt sich darstellen wie ein normales K.O. System.
-
Hatte es mitr nicht ganz so genau angeschaut
- aber auf der rechten Seite gibt es doch auch noch das Finale der Sieger der beiden Seiten
Aber dann wirst du deine Tabelle (wenn du unbedingt weiterhin eine verwenden willst) wohl etwas umgestalten müssen - oder der Sieger einer Begegnung steht eben nicht immer in der Mitte, sodass im Falle, dass eine Manschaft von rechts rumwechselt einfach 2 Kästen direkt nebeneinander kommen.