login  Naam:   Wachtwoord: 
Registreer je!
 Forum

rekenen met max()

Offline Clemens32 - 06/09/2006 13:22
Avatar van Clemens32PHP interesse http://www.plaatscode.be/2572/
Ik zoek het duurste subtotaal.

Als ik dan var_dump($_SESSION['cart']) doe krijg ik dit:

array(2) { [4]=> array(2) { ["aantal"]=> string(1) "2" ["subtotaal"]=> float(865.88) } [7]=> array(2) { ["aantal"]=> string(1) "5" ["subtotaal"]=> float(279.95) } }

Nu moet ik hiervan het duurste bedrag (in dit geval dus 865.88) in een var kunnen zetten om daarmee een percentage uit te kunnen rekenen.

11 antwoorden

Gesponsorde links
Offline Rens - 06/09/2006 13:24
Avatar van Rens Gouden medaille

Crew algemeen
Door de array lopen, en tegelijkertijd een variabele maken die de hoogste waarde bijhoud.
Dan check je of $array[$i]['subtotaal'] groter is dan de waarde in de variabele.
Zo ja, die waarde er in zetten, zo nee, de waarde laten staan.
Offline Clemens32 - 06/09/2006 13:30
Avatar van Clemens32 PHP interesse Bedoel je door $_SESSION['cart'] heenlopen?
dat gebeurt al bij regel 29, maar is het niet een idee om daarin dan een sessie te maken als $_SESSION['duurstesubtotaal'] = max( ?????);

Anders begrijp ik even niet wat je bedoeld.

Nu even brutaal:
Zou je het voor mij zo kunnen zetten dat het werkt, ik ben hier inmiddels alweer 2 dagen mee bezig?
Als je dat niet doet snap ik het, doe je het wel is mijn dank ontzettend groot, hahahaha.
Offline Rens - 06/09/2006 13:34
Avatar van Rens Gouden medaille

Crew algemeen
Ik zal eens een klein voorbeeldje maken zoals ik het bedoel.
Daarna kun je het wel omzetten naar hoe het moet 
  1. <?PHP
  2. // de array met waardes
  3. $aArray[0]['aantal'] = 2;
  4. $aArray[0]['subtotaal'] = float(865.88);
  5.  
  6. $aArray[1]['aantal'] = 5;
  7. $aArray[1]['subtotaal'] = float(279.95);
  8.  
  9. // het hoogste subtotaal
  10. $iHoogsteSub = 0;
  11. // er door heen lopen
  12. for($i = 0; $i < count($aArray); $i++)
  13. {
  14. // kijken of er een hoger subtotaal gevonden is
  15. if($aArray[$i]['subtotaal'] > $iHoogsteSub)
  16. {
  17. // ja, even $iHoogsteSub aanpassen
  18. $iHoogsteSub = $aArray[$i]['subtotaal'];
  19. }
  20. }
  21. ?>
Offline b4nkr0bz0r - 06/09/2006 13:43
Avatar van b4nkr0bz0r PHP gevorderde
  1. <?php
  2. // De array...
  3. $aWaarden = array('blaat' => 18, 'blaat2' => 3, 'blaat4' => 21);
  4.  
  5. // Alle waardes...
  6. $aValues = array_values($aWaarden);
  7.  
  8. // Loop alle waardes uit de array door...
  9. for ($i = 0; $i < count($aWaarden); $i++)
  10. {
  11. // Kijken of het een getal is...
  12. if (ctype_digit($aValues[$i]))
  13. {
  14. // Kijken of er al een keer een value is opgeslagen...
  15. if (!IsSet($iHoogste))
  16. {
  17. // Zoniet, doen we dat nu...
  18. $iHoogste = $aValues[$i];
  19. }
  20. else
  21. {
  22. // Anders kijken we het oude kleiner was...
  23. if ($iHoogste < $aValues[$i])
  24. {
  25. // We overschrijven de waarden...
  26. $iHoogste = $aValues[$i];
  27. }
  28. }
  29. }
  30. }
  31. ?>


Je kan dit proberen!
Offline Clemens32 - 06/09/2006 13:48 (laatste wijziging 06/09/2006 13:48)
Avatar van Clemens32 PHP interesse Maar betekend dit dat ik $aArray moet maken of kan ik de bestaande gebruiken, dus:

$value['aantal']
en
number_format($_SESSION['cart'][$id]['subtotaal']

En het aantal produkten kan altijd nog meer en/of minder zijn dan twee, oh vandaar $aArray[$i].

Moet ik het dan zo doen, want volgens mij heb ik aantal niet nodig?

Buiten de foreach:

  1. <?php
  2. number_format($_SESSION[]['cart'][$id]['subtotaal'], 2, ",", ".") = number_format($_SESSION['cart'][$id]['subtotaal'], 2, ",", ".");
  3.  
  4. // het hoogste subtotaal
  5. $iHoogsteSub = 0;
  6. // er door heen lopen
  7. for($i = 0; $i < count(number_format($_SESSION[]['cart'][$id]['subtotaal'], 2, ",", ".")); $i++)
  8. {
  9. // kijken of er een hoger subtotaal gevonden is
  10. if(number_format($_SESSION[$i]['cart'][$id]['subtotaal'], 2, ",", ".") > $iHoogsteSub)
  11. {
  12. // ja, even $iHoogsteSub aanpassen
  13. $iHoogsteSub = number_format($_SESSION[]['cart'][$id]['subtotaal'], 2, ",", ".");
  14. }
  15. }
  16. echo 'het duurste subtotaal is: '.$iHoogsteSub;
  17. ?>

Offline Rens - 06/09/2006 13:48
Avatar van Rens Gouden medaille

Crew algemeen
Ik zou zeggen, probeer het uit.
Maar volgens mij klopt het wel ja 
Offline Thomas - 06/09/2006 13:52 (laatste wijziging 06/09/2006 13:53)
Avatar van Thomas Moderator $_SESSION[]['cart'][$id]['subtotaal']

Die [] lijkt mij geen goed idee...

Doe maar eens

  1. echo "<pre>".print_r($_SESSION, 1)."</pre>";


nadat je een aantal items aan je cart hebt toegevoegd...
Offline Clemens32 - 06/09/2006 13:52 (laatste wijziging 06/09/2006 14:03)
Avatar van Clemens32 PHP interesse Ik ga het zeker proberen.
Als het gelukt is hoor je het (als het niet is gelukt, hoor je het ook, hahaha).

FangorN, ik krijg al een foutmelding.
Fatal error: Cannot use [] for reading in /home/*****/domains/*********.eu/public_html/nl/winkel/winkelwagen.php on line 371


Wat zou dat dan moeten worden?
Offline Thomas - 06/09/2006 14:24 (laatste wijziging 06/09/2006 14:25)
Avatar van Thomas Moderator Als je met arrays gaat werken, is het handig als je hier zelf enige handigheid voor ontwikkelt.

Hiertoe kun je het beste bij tijd en wijlen bij wijze van debug je array-structuur op het scherm dumpen (zie codefragment hierboven).
Als je een array probeert uit te lezen, en dit levert niet het juiste resultaat op, dan helpt dit enorm bij het debuggen (en voor het begrip natuurlijk ook).

Je hebt zelf volledige zeggenschap over hoe je arrays opgebouwd worden, dus maak je een structuur die handig werkt.

Wat ik in een cart zou verwachten is een lijst met product-id's, en de daarbij horende aantallen (en eventueel een prijs). De rest van de informatie (subtotaal, wat betekent dat eigenlijk? aantal x prijs?) is afleidbaar, dus deze sla je IMO niet op in je sessie. Dit omdat het niet nodig is, en omdat je zo makkelijker het overzicht kunt bewaren.

Ik moedig je hiermee aan om jezelf te verdiepen in de array / sessie materie en een serieuze poging onderneemt je deze materie eigen te maken.

EDIT
Hierbij zou je simpel kunnen beginnen met enkel een array, en dit daarna pas overhevelt naar sessies enzo.
Offline Clemens32 - 06/09/2006 14:30 (laatste wijziging 06/09/2006 14:31)
Avatar van Clemens32 PHP interesse Ik heb al een tijdje problemen met array's inderdaad.
In de sessie cart zit in mijn geval produkt_id en aantal.
Daaraan wordt in bovenstaande code subtotaal toegevoegd om deze ook buiten de foreach te kunnen gebruiken.

Ik probeer zoveel mogelijk de array's uit te lezen, maar echt helemaal goed ermee omgaan kan ik nog niet.

Kun je mij vertellen hoe mijn code er dan uit zou moeten zien?
(als ik het zie begrijp ik het meestal wel, maar om zelf te verzinnen vind ik altijd lastig).

[edit]
een reaktie op jouw edit:

De code is totaal 680 regels, dus heb ik alleen de relevante code geplaatst.
Die sessies heb ik vaker nodig.
[/edit]
Offline Thomas - 06/09/2006 14:34
Avatar van Thomas Moderator Dump nu gewoon eens je shoppingcart, en ga eens spelen met de for()- en foreach()-lus. We kunnen je wel code voorkauwen, maar als je het niet snapt, sta je hier over 5 tellen weer met een vraag over arrays. Het is belangrijk dat je het zelf ook snapt en je leert dit soort dingen alleen door het te doen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.215s