Door
Leonoor Slijfer
op 21-09-2017 18:36
gewijzigd op 21-09-2017 20:15
3.746 views
Voor school moest ik 2 array's maken in php. Dit heb ik gedaan
Een prijslijst en een bestelling. Nou moest ik aangeven hoe duur die bestelling zou zijn.
Dit is het antwoord dat ik gekregen heb. Kan iemand me uitleggen wat er in regel 18 gebeurd?
Andere tip: uit het volgnummer 1 in $bestelling1 en $totaal1 kun je afleiden dat er meerdere bestellingen zijn. En los van de code is dat eigenlijk al wel logisch door de business case, want welk bedrijf heeft nou maar één bestelling? Dat schreeuwt om een meerdimensionale array ...
It is not necessary to initialize variables in PHP however it is a very good practice. Uninitialized variables have a default value of their type depending on the context in which they are used - booleans default to FALSE, integers and floats default to zero, strings (e.g. used in echo) are set as an empty string and arrays become to an empty array.
Ik ben het wel met je eens dat het verstandig is om een variabele expliciet te initialiseren. Dat maakt de bedoeling duidelijk aan de persoon die over anderhalf jaar eens iets aan dat stuk code wil wijzigen. Bovendien hoef je je niet elke keer af te vragen hoe dat ook weer zat met default-waardes. ;-)
Okeey, ik heb $totaal1 in $totaal veranderd. Dat is inderdaad beter.
Ook heb ik op regel 17 voor de foreach de $totaal op 0 gezet.
kan iemand omschrijven wat er gebeurd op regel 19?
Op regel 19 wordt het aantal glazen dat van een bepaald drankje is besteld vermenigvuldigd met de prijs van dat drankje. De uitkomst daarvan wordt toegevoegd aan het totaalbedrag.
Om antwoord te geven op de vraag:
$totaal houdt een tussenstand (en uiteindelijk het eindbedrag) van de bestelling bij.
De for-loop doorloopt $bestelling1.
In elke stap van de loop (ook wel iteratie genoemd) wordt de oude waarde van $totaal (het resultaat van de vorige iteratie(s)) opgehoogd met de hoeveelheid ($aantal) keer de prijs ($prijzen[$drink]) van de huidige bestellingsregel.
Je kunt dit voor het begrip altijd uitschrijven.
Eerste iteratie van de bestelling:
cola (de waarde van $drink in de eerste iteratie) x 2 (de waarde van $aantal in de eerste iteratie).
$prijzen[$drink] wordt dus $prijzen['cola'], oftewel, de bijbehorende prijs van cola wordt opgehaald: 2.5
De rekensom van de eerste iteratie wordt dus:
$totaal = 0 (waarde van $totaal voordat je door de bestelling heengaat) + 2 (aantal) * 2.5 (prijs van de cola).
Op een soortgelijke wijze volgen de volgende stappen van de loop, waarbij in de eerstvolgende stap de oude waarde van $totaal gelijk is aan 5.0 (het totaal van de totdan toe doorlopen bestellingsregels).
Na afloop van de for-loop bevat $totaal dus het eindbedrag van de bestelling, wat in feite een som van producten is.
EDIT: als je de loop uitschrijft krijg je dus zoiets:
Strict genomen is dit (in ieder geval in PHP) geen probleem.
Je krijgt wel een Notice om je oren. Ligt eraan wat je allemaal logt, maar ik wil die in het log hebben (niet geïnitialiseerde vars is meestal een teken aan de wand voor meer bagger). En als je een set_error_handler() instelt (zwaar aan te bevelen) zal die ook aangeroepen worden.