BigBrother Posted January 22, 2009 Share Posted January 22, 2009 Hi peeps, I am trying to work out hot to create a schedule to allocate games to teams within a league this is what I am trying to attempt Season has 70 days [league match] Every Mon [league match] Every Tue [reserved for cup match] Wed [league match] Every Thu [league match] Every Fri [reserved for cup match] Sat [no game] Sun Any assistance would be appreciated, and I will be looking around to see if I can find similar code to give me a head start. Regards BB Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/ Share on other sites More sharing options...
RussellReal Posted January 22, 2009 Share Posted January 22, 2009 I'm assuming 70 days would be 10 weeks.. and if so create a table with 5 fields id - int - auto increment home_team - text ^^ something like "BunnySlippers" away_team - text ^^ something like "TeddyBears" week - int ^^ something like 1-10 for like.. week 1.. week 2.. day - int ^^ something like 1 - 7 for day1 day2 day3 then when you want to pull week 2 of the database you'd just do "SELECT * FROM `yourTable` WHERE `week` = '2'" Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-743066 Share on other sites More sharing options...
BigBrother Posted January 22, 2009 Author Share Posted January 22, 2009 Thanks will have a go and see how I get on... thanks for your help Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-743074 Share on other sites More sharing options...
RussellReal Posted January 22, 2009 Share Posted January 22, 2009 anytime man, and I think its nice you're doing sumfin for the kids (judging by your username) Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-743076 Share on other sites More sharing options...
BigBrother Posted February 16, 2009 Author Share Posted February 16, 2009 Found this and works for me <?php 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) { $ns = array(); for ($i = 1; $i <= $n; $i++) { $ns[] = $i; } return $ns; } function show_fixtures($names) { $teams = sizeof($names); print "<p>Fixtures for $teams teams.</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; $rounds = array(); for ($i = 0; $i < $totalRounds; $i++) { $rounds[$i] = array(); } 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. $interleaved = array(); 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>Round " . ($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 = split(' v ', $match); return $components[1] . " v " . $components[0]; } function team_name($num, $names) { $i = $num - 1; if (sizeof($names) > $i && strlen(trim($names[$i])) > 0) { return trim($names[$i]); } else { return $num; } } function get_form() { $s = ''; $s = '<p>Enter number of teams OR team names</p>' . "\n"; $s .= '<form action="' . $_SERVER['SCRIPT_NAME'] . '">' . "\n"; $s .= '<label for="teams">Number of Teams</label><input type="text" name="teams" />' . "\n"; $s .= '<input type="submit" value="Generate Fixtures" />' . "\n"; $s .= '</form>' . "\n"; $s .= '<form action="' . $_SERVER['SCRIPT_NAME'] . '">' . "\n"; $s .= '<div><strong>OR</strong></div>' . "\n"; $s .= '<label for="names">Names of Teams (one per line)</label>' . '<textarea name="names" rows="8" cols="40"></textarea>' . "\n"; $s .= '<input type="submit" value="Generate Fixtures" />' . "\n"; $s .= "</form>\n"; return $s; } main(); ?> Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-763070 Share on other sites More sharing options...
BigBrother Posted February 16, 2009 Author Share Posted February 16, 2009 Here's a challenge I need to select a league of 20 teams league = prem ids = 1,2,3,4...etc team_names = team_1, team_2, team_3, team,4...etc I need to modify the script below and add the fixtures to my database... a good challenge ... i will have a go anyone up for it? Found this and works for me <?php 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) { $ns = array(); for ($i = 1; $i <= $n; $i++) { $ns[] = $i; } return $ns; } function show_fixtures($names) { $teams = sizeof($names); print "<p>Fixtures for $teams teams.</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; $rounds = array(); for ($i = 0; $i < $totalRounds; $i++) { $rounds[$i] = array(); } 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. $interleaved = array(); 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>Round " . ($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 = split(' v ', $match); return $components[1] . " v " . $components[0]; } function team_name($num, $names) { $i = $num - 1; if (sizeof($names) > $i && strlen(trim($names[$i])) > 0) { return trim($names[$i]); } else { return $num; } } function get_form() { $s = ''; $s = '<p>Enter number of teams OR team names</p>' . "\n"; $s .= '<form action="' . $_SERVER['SCRIPT_NAME'] . '">' . "\n"; $s .= '<label for="teams">Number of Teams</label><input type="text" name="teams" />' . "\n"; $s .= '<input type="submit" value="Generate Fixtures" />' . "\n"; $s .= '</form>' . "\n"; $s .= '<form action="' . $_SERVER['SCRIPT_NAME'] . '">' . "\n"; $s .= '<div><strong>OR</strong></div>' . "\n"; $s .= '<label for="names">Names of Teams (one per line)</label>' . '<textarea name="names" rows="8" cols="40"></textarea>' . "\n"; $s .= '<input type="submit" value="Generate Fixtures" />' . "\n"; $s .= "</form>\n"; return $s; } main(); ?> Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-763593 Share on other sites More sharing options...
BigBrother Posted February 16, 2009 Author Share Posted February 16, 2009 Nearly there... all I need to do now is add the results to the database <?php // CONNECTING TO DATABASE $dbhost = 'localhost'; $dbuser = '********'; $dbpass = '********'; $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql'); $dbname = '*******'; mysql_select_db($dbname); $table = "eden_prem"; $sql = "SELECT * FROM $table"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { $names[] = $row['team_name']; $ids[] = $row['id']; } mysql_free_result($result); echo show_fixtures($names,$ids); function nums($n) { $ns = array(); for ($i = 1; $i <= $n; $i++) { $ns[] = $i; } return $ns; } function show_fixtures($names,$ids) { $teams = sizeof($names); echo $teams; print "<p>Fixtures for $teams teams.</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; $rounds = array(); for ($i = 0; $i < $totalRounds; $i++) { $rounds[$i] = array(); } 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. $interleaved = array(); 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>Match " . ($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>Match " . $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 = split(' v ', $match); return $components[1] . " v " . $components[0]; } function team_name($num, $names) { $i = $num - 1; if (sizeof($names) > $i && strlen(trim($names[$i])) > 0) { return trim($names[$i]); } else { return $num; } } ?> Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-763737 Share on other sites More sharing options...
BigBrother Posted February 17, 2009 Author Share Posted February 17, 2009 OK need help now need to add the rounds 38 rounds to the database, can anyone help with this? ??? <?php // CONNECTING TO DATABASE $dbhost = 'localhost'; $dbuser = '***'; $dbpass = '***'; $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql'); $dbname = '***'; mysql_select_db($dbname); $table = "eden_prem"; $sql = "SELECT * FROM $table"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { $names[] = $row['team_name']; $ids[] = $row['team_id']; } mysql_free_result($result); echo show_fixtures($names,$ids); function nums($n) { $ns = array(); for ($i = 1; $i <= $n; $i++) { $ns[] = $i; } return $ns; } function show_fixtures($names,$ids) { $teams = sizeof($names); // 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; $rounds = array(); for ($i = 0; $i < $totalRounds; $i++) { $rounds[$i] = array(); } 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); mysql_query ("INSERT INTO se_team_fixtures (home_team, away_team, league) VALUES ('$ids[$home]','$ids[$away]', 'eden_prem')") or die(mysql_error()); mysql_query ("INSERT INTO se_team_fixtures (home_team, away_team, league) VALUES ('$ids[$away]','$ids[$home]', 'eden_prem')") or die(mysql_error()); } } } function team_name($num, $names) { $i = $num - 1; if (sizeof($names) > $i && strlen(trim($names[$i])) > 0) { return trim($names[$i]); } else { return $num; } } print "<p>Fixtures for $table have been created.</p>"; // CLOSE CONNECTION TO DATABASE mysql_close($conn); ?> Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-764160 Share on other sites More sharing options...
BigBrother Posted February 17, 2009 Author Share Posted February 17, 2009 Anyone help with this one at all? Quote Link to comment https://forums.phpfreaks.com/topic/141915-create-a-schedule-for-football-team/#findComment-764469 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.