10 Challenge Voetbal
Voor deze challenge heb je kennis nodig van:
- HTML en CSS basis kennis
- gebruik van variabelen in PHP
- loops in PHP
- indexed arrays, assiociative arrays en complexe arrays (datastructuren) in PHP
- gebruik van condities (if-then) in PHP
Data structuren
Data structuren zijn manieren waarop gegevens in de computer zijn opgeslagen. In deze challenge gaan we kijken naar een datastructuur van voetbaluitslagen. Uit deze uitslagen gaan we per ploeg berekenen hoeveel punten deze club in totaal heeft.
In deze challenge bestaat de datastructuur uit een array van gespeelde wedstrijden.
Elke wedstrijd is een assciociative array, bijvoorbeeld:
['thuis' => 'FC Twente', 'uit' => 'Fortuna Sittard', 'uitslag'=> [1,2] ]
Het assiociative array heeft drie elementen. De naam van de thuisclub, de naam van de uitclub en de uitslag. De uitslag zelf is weer een (indexed) array met twee elementen.
De uitdaging
Je hebt een datastructuur $uitslagen (zie regel 3 en volgende in code). Deze datastructuur is een array van acciociative arrays waarin van een aantal gespeelde wedstrijden de eindscore staat.
Je ziet op bijvoorbeeld regel 4 dat Feyenoord tegen FC Twente heeft gespeeld en dat de uitslag 1-2 was. FC Twente heeft dus gewonnen.
De opdracht is om een lijstje te maken waarin van alle voetbalclubs het aantal punten dat zij hebben behaald wordt berekend.
De punten worden als volgt berekend;
Uitslag |
Punten |
Gewonnen |
3 |
Gelijkspel |
1 |
Verloren |
0 |
Voorbeeld, later we FC Twente nemen.
FC Twente heeft 3 x gespeeld (regel 4, 21 en 31). FC Twente heeft 2x gewonnen en 1x verloren. FC Twente heeft dus 6 punten uit 3 wedstrijden.
De output zou dan worden:
Club |
Punten |
Gespeeld |
FC Twente |
6 |
3 |
... |
... |
.. |
Op regel 47 t/m 53 worden er 2 assioiciative arrays gemaakt en worden alle waarden op 0 gezet. Je kunt deze arrays gebruiken om de output in vast te leggen. In de tabel eronder worden de waarden afgedrukt.
<?php
$uitslagen=[
['thuis' => 'Feyenoord', 'uit' => 'FC Twente', 'uitslag'=> [1,2] ],
['thuis' => 'AZ', 'uit' => 'RKC Waalwijk', 'uitslag'=> [1,3] ],
['thuis' => 'PEC Zwolle', 'uit' => 'PSV', 'uitslag'=> [1,2] ],
['thuis' => 'Heracles Almelo', 'uit' => 'Sparta Rotterdam', 'uitslag'=> [1,3] ],
['thuis' => 'sc Heerenveen', 'uit' => 'Go Ahead Eagles', 'uitslag'=> [3,1] ],
['thuis' => 'FC Groningen', 'uit' => 'SC Cambuur', 'uitslag'=> [2,3] ],
['thuis' => 'Vitesse', 'uit' => 'Ajax', 'uitslag'=> [2,2] ],
['thuis' => 'Willem II', 'uit' => 'FC Utrecht', 'uitslag'=> [3,0] ],
['thuis' => 'N.E.C.', 'uit' => 'Fortuna Sittard', 'uitslag'=> [0,1] ],
['thuis' => 'Ajax', 'uit' => 'sc Heerenveen', 'uitslag'=> [5,0] ],
['thuis' => 'RKC Waalwijk', 'uit' => 'Heracles Almelo', 'uitslag'=> [2,0] ],
['thuis' => 'Fortuna Sittard', 'uit' => 'Vitesse', 'uitslag'=> [1,2] ],
['thuis' => 'Sparta Rotterdam', 'uit' => 'PEC Zwolle', 'uitslag'=> [2,0] ],
['thuis' => 'Go Ahead Eagles', 'uit' => 'Feyenoord', 'uitslag'=> [0,1] ],
['thuis' => 'SC Cambuur', 'uit' => 'Willem II', 'uitslag'=> [1,1] ],
['thuis' => 'PSV', 'uit' => 'N.E.C.', 'uitslag'=> [3,2] ],
['thuis' => 'FC Twente', 'uit' => 'FC Groningen', 'uitslag'=> [3,0] ],
['thuis' => 'FC Utrecht', 'uit' => 'AZ', 'uitslag'=> [2,2] ],
['thuis' => 'Feyenoord', 'uit' => 'PSV', 'uitslag'=> [2,2] ],
['thuis' => 'AZ', 'uit' => 'Ajax', 'uitslag'=> [2,2] ],
['thuis' => 'Vitesse', 'uit' => 'sc Heerenveen', 'uitslag'=> [1,2] ],
['thuis' => 'N.E.C.', 'uit' => 'Go Ahead Eagles', 'uitslag'=> [1,0] ],
['thuis' => 'FC Groningen', 'uit' => 'Sparta Rotterdam', 'uitslag'=> [1,2] ],
['thuis' => 'PEC Zwolle', 'uit' => 'FC Utrecht', 'uitslag'=> [1,1] ],
['thuis' => 'Willem II', 'uit' => 'Heracles Almelo', 'uitslag'=> [2,0] ],
['thuis' => 'FC Twente', 'uit' => 'Fortuna Sittard', 'uitslag'=> [1,2] ],
['thuis' => 'SC Cambuur', 'uit' => 'RKC Waalwijk', 'uitslag'=> [1,1] ],
['thuis' => 'N.E.C.', 'uit' => 'Fortuna Sittard', 'uitslag'=> [0,0] ],
];
echo "<table border=1>";
echo "<tr><th>Thuis</th><th>Uit</th><th></th><th></th></tr>";
foreach ($uitslagen as $uitslag) {
echo "<tr>";
echo "<td>".$uitslag['thuis']."</td>";
echo "<td>".$uitslag['uit']."</td>";
echo "<td>".$uitslag['uitslag'][0]."</td>";
echo "<td>".$uitslag['uitslag'][1]."</td>";
echo "</tr>";
}
echo "</table>";
$punten=[];
$gespeeld=[];
foreach ($uitslagen as $uitslag) {
$punten[$uitslag['thuis']]=0;
$punten[$uitslag['uit']]=0;
$gespeeld[$uitslag['thuis']]=0;
$gespeeld[$uitslag['uit']]=0;
}
echo "<table border=1>";
echo "<tr><th>Club</th><th>Punten</th><th>Gespeeld</th></tr>";
foreach ($punten as $key => $value) {
echo "<tr>";
echo "<td>".$key."</td>";
echo "<td>".$value."</td>";
echo "<td>".$gespeeld[$key]."</td>";
echo "</tr>";
}
echo "</table>";
Output
De output is gesorteerd op punten en laat een lijstje zien van alle voetbalclubs en hun behaalde punten. De tabel ziet er netjes uit.
Aanpak
Er zijn meerdere mogelijkheden om dit aan te pakken. Hieronder wordt een mogelijke oplossing beschreven. Je hoeft deze stappen niet te volgend.
- We moeten door de uitslagen array heen lopen om per wedstrijd te bepalen welke ploeg hoeveel punten krijgt.
Maak dus een loop die door de uitslagen loopt. - In de loop maak je twee variabelen $thuisClub en $uitClub. Je geeft deze de waarden van de thuis en uitclub.
-> Test of je deze twee variabelen de juiste waarde heb gegeven door ze af te drukken. - In de loop maak je nog twee variabelen $thuisScore en $uitScore. Je geeft deze de waarden van het aantal doelpunten dat de thuis- en uitclub hebben gescoord.
-> Test of je ook deze twee variabelen de juiste waarde heb gegeven door ze af te drukken. - Nu zijn er drie mogelijkheden:
De $thuisScore > $uitScore, de $thuisClub krijgt 3 punten
De $uitScore > $thuisScore , de $uitClub krijgt 3 punten
De $thuisScore == $uitScore, de $thuisClub en $uitClub krijgen beiden 1 punt.
Maak de juiste if's en vul het punten array.
Denk eraan dat de key van het punten array de naam van de club is en die staat in $thuisClub en $uitClulb.
-> Test, bedenk een manier om te testen of de club de juiste punten krijgt. - Voor de thuis- en uitclub moet je het aantal gespeelde wedstrijden met één ophogen. Hiervoor hoog je de juiste waarde op in het $gespeeld array. Ook in het $gespeeld array is de key de naam van de club.
- Test de gehele berekening.
Eisen
- Zorg ervoor dat alle uitkomsten kloppen (60 punten).
- Zorg ervoor dat de output gestyled is (gebruik styles en classes). Maak er wat moois van, overtuig de klant dat jij iets moois kan maken (20 punten)
- Zorg ervoor dat de HTML code klopt en volledig is. Dus gebruik <html>, <head> etc (10 punten).
- De code klopt, het inspringen en uitlijnen is goed en je hebt duidelijk commentaar toegevoegd om uit te leggen wat je doet (10 punten).
Inleveren
- Screendump van jouw gehele browser met het resultaat.
- De PHP code.