Berekening in PHP
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$prijzen = array();
$prijzen ["cola"] = 2.5;
$prijzen ["koffie"] = 2;
$prijzen ["thee"] = 1.75;
$prijzen ["bier"] = 2.25;
$prijzen ["wijn"] = 3.75;
$prijzen ["water"] = 0.50;
$bestelling1 = array();
$bestelling1 ["cola"] = 2;
$bestelling1 ["bier"] =1;
$bestelling1 ["wijn"] =1;
$bestelling1 ["water"] =1;
$bestelling1 ["koffie"] =3;
foreach ($bestelling1 as $drink => $aantal){
$totaal1 = $totaal1 + $aantal * $prijzen[$drink];
}
foreach($prijzen as $drink => $prijs){
}
print ("het totaalbedrag van bestelling 1(H)=".$totaal1);
?>
[modedit="- Arin -"]Titel aangepast van 'PHP vraag' naar 'Berekening in PHP'. Gelieve in het vervolg een duidelijke titel op te geven die je probleem en/of vraagstelling aanduidt.[/modedit]
$prijzen = array();
$prijzen ["cola"] = 2.5;
$prijzen ["koffie"] = 2;
$prijzen ["thee"] = 1.75;
$prijzen ["bier"] = 2.25;
$prijzen ["wijn"] = 3.75;
$prijzen ["water"] = 0.50;
$bestelling1 = array();
$bestelling1 ["cola"] = 2;
$bestelling1 ["bier"] =1;
$bestelling1 ["wijn"] =1;
$bestelling1 ["water"] =1;
$bestelling1 ["koffie"] =3;
foreach ($bestelling1 as $drink => $aantal){
$totaal1 = $totaal1 + $aantal * $prijzen[$drink];
}
foreach($prijzen as $drink => $prijs){
}
print ("het totaalbedrag van bestelling 1(H)=".$totaal1);
?>
[modedit="- Arin -"]Titel aangepast van 'PHP vraag' naar 'Berekening in PHP'. Gelieve in het vervolg een duidelijke titel op te geven die je probleem en/of vraagstelling aanduidt.[/modedit]
Gewijzigd op 21/09/2017 20:15:37 door - Ariën -
Hier vormt zich een probleem. Want je probeert de huidige waarde van $totaal1 (opnieuw) aan $totaal1 toe te kennen.
Echter Bestaat die variabele $totaal1 de eerste keer nog helemaal niet!
Dus zou je in ieder geval boven die foreach op regel 17 een regel moeten toevoegen waarin je $totaal1 initialiseert.
Toevoeging op 21/09/2017 18:47:23:
Tipje: Haal die cijfer 1 weg achter die variabelen. Dus gewoon $totaal in plaats van $totaal1.
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 ...
Frank Nietbelangrijk op 21/09/2017 18:45:46:
Hier vormt zich een probleem. Want je probeert de huidige waarde van $totaal1 (opnieuw) aan $totaal1 toe te kennen.
Echter Bestaat die variabele $totaal1 de eerste keer nog helemaal niet!
Echter Bestaat die variabele $totaal1 de eerste keer nog helemaal niet!
Strict genomen is dit (in ieder geval in PHP) geen probleem. Zie de documentatie (http://nl1.php.net/manual/en/language.variables.basics.php):
Quote:
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. ;-)
Ook heb ik op regel 17 voor de foreach de $totaal op 0 gezet.
kan iemand omschrijven wat er gebeurd op regel 19?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$prijzen = array();
$prijzen ["cola"] = 2.5;
$prijzen ["koffie"] = 2;
$prijzen ["thee"] = 1.75;
$prijzen ["bier"] = 2.25;
$prijzen ["wijn"] = 3.75;
$prijzen ["water"] = 0.50;
$bestelling1 = array();
$bestelling1 ["cola"] = 2;
$bestelling1 ["bier"] =1;
$bestelling1 ["wijn"] =1;
$bestelling1 ["water"] =1;
$bestelling1 ["koffie"] =3;
$totaal = 0;
foreach ($bestelling1 as $drink => $aantal){
$totaal = $totaal + $aantal * $prijzen[$drink];
}
foreach($prijzen as $drink => $prijs){
}
print ("het totaalbedrag van bestelling 1(H)=".$totaal);
$prijzen = array();
$prijzen ["cola"] = 2.5;
$prijzen ["koffie"] = 2;
$prijzen ["thee"] = 1.75;
$prijzen ["bier"] = 2.25;
$prijzen ["wijn"] = 3.75;
$prijzen ["water"] = 0.50;
$bestelling1 = array();
$bestelling1 ["cola"] = 2;
$bestelling1 ["bier"] =1;
$bestelling1 ["wijn"] =1;
$bestelling1 ["water"] =1;
$bestelling1 ["koffie"] =3;
$totaal = 0;
foreach ($bestelling1 as $drink => $aantal){
$totaal = $totaal + $aantal * $prijzen[$drink];
}
foreach($prijzen as $drink => $prijs){
}
print ("het totaalbedrag van bestelling 1(H)=".$totaal);
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.
$prijzen[$drink]
In de variabele $drink zit een waarde als bijvoorbeeld 'cola' of 'koffie' etc.
Dan krijg je weer hetzelfde als
$prijzen["cola"] of $prijzen["koffie"]
Houd ook mijnheer van Dale nog even in de gaten, het zou mij niets verbazen dat die hier nog even roet in het eten gooit.
Meneer van D werd begraven toen het rekenonderwijs werd afgeschaft.
De kosten van consumpties worden tegenwoordig met een App berekend.
$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:
Code (php)
1
2
3
4
5
2
3
4
5
$totaal = 0 + 2 * 2.5; // 2 x cola = 5.0, tussenstand = 5.0
$totaal = 5.0 + 1 * 2.25; // 1 x bier = 2.25, tussenstand = 7.25
$totaal = 7.25 + 1 * 3.75; // 1 x wijn = 3.75, tussenstand = 11.00
$totaal = 11.00 + 1 * 0.50; // 1 x water = 0.50, tussenstand = 11.50
$totaal = 11.50 + 3 * 2; // 3 x koffie = 6, tussenstand 17.50
$totaal = 5.0 + 1 * 2.25; // 1 x bier = 2.25, tussenstand = 7.25
$totaal = 7.25 + 1 * 3.75; // 1 x wijn = 3.75, tussenstand = 11.00
$totaal = 11.00 + 1 * 0.50; // 1 x water = 0.50, tussenstand = 11.50
$totaal = 11.50 + 3 * 2; // 3 x koffie = 6, tussenstand 17.50
Gewijzigd op 21/09/2017 22:39:20 door Thomas van den Heuvel
Willem vp op 21/09/2017 18:58:48:
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.
Bedankt voor de reacties allemaal! Ik snap hem!