Berekening in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Leonoor Slijfer

Leonoor Slijfer

21/09/2017 18:36:00
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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]
Gewijzigd op 21/09/2017 20:15:37 door - Ariën -
 
PHP hulp

PHP hulp

19/04/2024 04:54:28
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/09/2017 18:45:46
Quote Anchor link
Het eerste stukje van regel 18:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$totaal1
= $totaal1
?>


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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$totaal1
= 0;
?>



Toevoeging op 21/09/2017 18:47:23:

Tipje: Haal die cijfer 1 weg achter die variabelen. Dus gewoon $totaal in plaats van $totaal1.
 
Ward van der Put
Moderator

Ward van der Put

21/09/2017 18:57:52
Quote Anchor link
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 ...
 
Willem vp

Willem vp

21/09/2017 18:58:48
Quote Anchor link
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!

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. ;-)
 
Leonoor Slijfer

Leonoor Slijfer

21/09/2017 19:11:53
Quote Anchor link
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?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
 
Willem vp

Willem vp

21/09/2017 19:18:21
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/09/2017 19:58:05
Quote Anchor link
Misschien snap je deze nog niet:

$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"]
 
Pipo Clown

Pipo Clown

21/09/2017 21:10:42
Quote Anchor link
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.
 
Adoptive Solution

Adoptive Solution

21/09/2017 21:20:12
Quote Anchor link
De huidige generatie HBO’ers weten niet wie meneer van Dale is.

Meneer van D werd begraven toen het rekenonderwijs werd afgeschaft.

De kosten van consumpties worden tegenwoordig met een App berekend.
 
Thomas van den Heuvel

Thomas van den Heuvel

21/09/2017 22:28:25
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 21/09/2017 22:39:20 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

21/09/2017 22:37:22
Quote Anchor link
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.
 
Leonoor Slijfer

Leonoor Slijfer

22/09/2017 15:39:50
Quote Anchor link
Bedankt voor de reacties allemaal! Ik snap hem!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.