A Simplified World Cup Draw Generator
If you’re a football fan, like I am, your anticipation for next year’s World Cup in Brazil is growing. This Friday, we will know the groupings for the 32 teams that will participate in the finals. I put together the (simplified) simulator shown in the gist below. Using PHP’s shuffle() function and SPL iterators, we can generate potential groups in less than 30 lines of code.
Want to learn how to leverage Iterators and Interfaces from the SPL? Check out our book, Mastering the SPL Library by Joshua Thijssen.
Some sample output:
A: Argentina, France, Korea Republic, Russia
B: Uruguay, Ecuador, Honduras, England
C: Belgium, Chile, Japan, Croatia
D: Colombia, Cote d'Ivoire, Mexico, Netherlands
E: Spain, Algeria, Australia, Greece
F: Switzerland, Nigeria, Iran, Italy
G: Germany, Ghana, USA, Portugal
H: Brazil, Cameroon, Cost Rica, Bosnia-Herzegovina
A: Colombia, Nigeria, Korea Republic, Bosnia-Herzegovina
B: Brazil, Chile, Japan, England
C: Spain, France, Iran, Netherlands
D: Switzerland, Cameroon, Mexico, Croatia
E: Germany, Ecuador, USA, Italy
F: Uruguay, Cote d'Ivoire, Cost Rica, Russia
G: Argentina, Algeria, Australia, Portugal
H: Belgium, Ghana, Honduras, Greece
I said this was a simplified example. For the actual draw, the pots are not balanced. Pot 2 which contains the teams from South America and Africa only has 7 teams. Pot 4 which is made up of non-seeded European teams has 9 items. You’ll notice that I moved France to Pot 2 so that each has an equal number. The actual draw also has these additional rules:
- Brazil enters the group A.
- Countries outside Europe will not be the same group with countries of the same region.
- European countries will enter up to two teams up to the group.
To account for these rules, we could create a
Group class that extends the
SplQueue class and validates if a team can be added to the group. We’d also need a simple
Team class with a property to hold a team’s region. There are additional tools from the SPL you could use when simulating the real problem, but this example shows you the power of the SPL. To learn more, read Joshua’s book.