Lo que hago es pasarle los IDs de cada equipo para generar el partido, estos los saco a través de una consulta indicándole antes de que campeonato se trata. No lo puse entero por simplificar el trabajo y no tener que explicar todo, pudiendolo explicar de manera errónea y que no se me entendiera.
Vamos a probar así a ver si se entiende mejor:
Código PHP:
Ver original<?php
/*
* This code owes an enormous debt to
* http://www.barrychessclub.org.uk/berger2001.htm
*/
function main() {
?>
<style>
input, textarea { display: block; margin-bottom: 1em; }
label { font-weight: bold; display: block; }
</style>
<h1>Fixtures Generator</h1>
<p>This page is part of <a
href="http://bluebones.net/2005/05/league-fixtures-generator/">bluebones.net</a>.</p>
<?php
// Find out how many teams we want fixtures for.
if (! isset($_GET['teams']) && ! isset($_GET['names'])) { print get_form();
} else {
# XXX check for int
print show_fixtures
(isset($_GET['teams']) ? nums
(intval($_GET['teams'])) : explode("\n", trim($_GET['names']))); }
}
function nums($n) {
for ($i = 1; $i <= $n; $i++) {
$ns[] = $i;
}
return $ns;
}
function show_fixtures($names) {
print "<p>Jornadas para $teams equipos.</p>";
// If odd number of teams add a "ghost".
$ghost = false;
if ($teams % 2 == 1) {
$teams++;
$ghost = true;
}
// Generate the fixtures using the cyclic algorithm.
$totalRounds = $teams - 1;
$matchesPerRound = $teams / 2;
for ($i = 0; $i < $totalRounds; $i++) {
}
for ($round = 0; $round < $totalRounds; $round++) {
for ($match = 0; $match < $matchesPerRound; $match++) {
$home = ($round + $match) % ($teams - 1);
$away = ($teams - 1 - $match + $round) % ($teams - 1);
// Last team stays in the same place while the others
// rotate around it.
if ($match == 0) {
$away = $teams - 1;
}
$rounds[$round][$match] = team_name($home + 1, $names)
. " v " . team_name($away + 1, $names);
}
}
// Interleave so that home and away games are fairly evenly dispersed.
for ($i = 0; $i < $totalRounds; $i++) {
$interleaved[$i] = array(); }
$evn = 0;
$odd = ($teams / 2);
for ($i = 0; $i < sizeof($rounds); $i++) { if ($i % 2 == 0) {
$interleaved[$i] = $rounds[$evn++];
} else {
$interleaved[$i] = $rounds[$odd++];
}
}
$rounds = $interleaved;
// Last team can't be away for every game so flip them
// to home on odd rounds.
for ($round = 0; $round < sizeof($rounds); $round++) { if ($round % 2 == 1) {
$rounds[$round][0] = flip($rounds[$round][0]);
}
}
// Display the fixtures
for ($i = 0; $i < sizeof($rounds); $i++) { print "<p>Jornada " . ($i + 1) . "</p>\n";
foreach ($rounds[$i] as $r) {
print $r . "<br />";
}
print "<br />";
}
print "<p>Second half is mirror of first half</p>";
$round_counter = sizeof($rounds) + 1; for ($i = sizeof($rounds) - 1; $i >= 0; $i--) { print "<p>Round " . $round_counter . "</p>\n";
$round_counter += 1;
foreach ($rounds[$i] as $r) {
print flip($r) . "<br />";
}
print "<br />";
}
print "<br />";
if ($ghost) {
print "Matches against team " . $teams . " are byes.";
}
}
function flip($match) {
$components = explode(' v ', $match); return $components[1] . " v " . $components[0];
}
function team_name($num, $names) {
$i = $num - 1;
} else {
return $num;
}
}
function get_form() {
$s = '';
$s .= '<form action="' . $_SERVER['SCRIPT_NAME'] . '">' . "\n";
$s .= '<label for="names">Introducir el ID de los equipos participantes (uno por linea)</label>'
. '<textarea name="names" rows="8" cols="40">
FC Barcelona
Real Madrid
Valencia CF
Sevilla
Osasuna
Málaga
Celta
Villarreal
Granada
Atlético de Madrid
Getafe
Althetic Club
</textarea>' . "\n";
$s .= '<input type="submit" value="Generate Fixtures" />' . "\n";
$s .= "</form>\n";
return $s;
}
main();
$ssql ="insert into matches (round,home,away) values ('" . $round. "','" . $home. "','" . $away. "')";
echo '<span class="label label-success">¡Partido insertado correctamente!</span>';
}else{
echo '<span class="label label-important">¡Ha habido un error!</span>';
?>
Pongámos que ya generé los equipos con los que quiero que se realice el emparejamiento.
Como podría utilizar el foreach aquí? No logro entenderlo por mucho que leo, no entiendo muy bien el proceso que realiza.