Avatar billede LilleUdvikler Nybegynder
10. september 2011 - 17:40 Der er 7 kommentarer og
1 løsning

array_sum på en SESSION (Indkøbskurv)

Hejsa.

Jeg har kastet mig over, at prøve og lave en indkøbskurv. Jeg kunne godt tænke mig, at renge ud, hvor mange penge brugeren har tilføjet vare til.

Jeg har prøvet, at bruge array_sum på denne måde:

echo "I alt ".array_sum($_SESSION['Basket']['Price'])." kr.";

Men den gør ingenting.

Kan jeg slet ikke bruge array_sum eller gør jeg det forkert?
Avatar billede inteeeL Nybegynder
10. september 2011 - 17:54 #1
Har du husket at erklære $_SESSION['basket'] et array:

$_SESSION['Basket'] = array();
Avatar billede LilleUdvikler Nybegynder
10. september 2011 - 18:06 #2
Ja, kan lige give dig alt koden her:

$iName = $_GET['iName'];
$iId = $_GET['iId'];
$iPrice = $_GET['iPrice'];
$iAntal = $_POST['iAntal'];

if(!isset($_SESSION['Basket'])){
    $_SESSION['Basket'] = Array();
}

if(isset($iAntal)){
    if($iAntal===''){
        $errMsg = "border:1px solid #F00;";
    } else {
        if($_GET['sAction'] == "AddProduct"){
                $Basket = array(
                'Name' => $iName,
                'ProductID' => $iId,
                'Price' => $iPrice,
                'Antal' => $iAntal
            );
            $_SESSION['Basket'][] = $Basket;
            header("Location: index.php");
        }
    }
}



if(isset($_SESSION['Basket'])){
    $basket_length=sizeof($_SESSION['Basket']);
        for($i=0;$i<$basket_length;$i++) {
            if(isset($_SESSION['Basket'][$i])) {
                    echo $_SESSION['Basket'][$i]['ProductID'] . " - " . $_SESSION['Basket'][$i]['Name'] . " - " . $_SESSION['Basket'][$i]['Antal'] . " - " . $_SESSION['Basket'][$i]['Price']. " kr." . "<br />";
                   
            }
        }
    }


$price_all = array('1' => $_SESSION['Basket']['Price']);
echo  "<p>".sizeof($_SESSION['Basket'])." vare(r) i kurven</p>";
echo "I alt ".array_sum($price_all)." kr.";


----------
Avatar billede inteeeL Nybegynder
10. september 2011 - 18:46 #3
Jeg har tilføjet en funktion, der løser problemet for dig. Grunden til, at det ikke virker med array_sum(..), er, at $_SESSION['basket'] er et array, der indeholder arrays - altså subarrays. Hvis du prøver at vise arrayet med print_r( $_SESSION['Basket'] vil du se dette.

Her er koden (rettelserne sker i bunden):

<?php

session_start();

$iName = $_GET['iName'];
$iId = $_GET['iId'];
$iPrice = $_GET['iPrice'];
$iAntal = $_POST['iAntal'];

if(!isset($_SESSION['Basket'])){
    $_SESSION['Basket'] = Array();
}

if(isset($iAntal)){
    if($iAntal===''){
        $errMsg = "border:1px solid #F00;";
    }
    else {
        if($_GET['sAction'] == "AddProduct"){
            $Basket = array(
                'Name' => $iName,
                'ProductID' => $iId,
                'Price' => $iPrice,
                'Antal' => $iAntal
            );
            $_SESSION['Basket'][] = $Basket;
            header("Location: index.php");
        }
    }
}

if(isset($_SESSION['Basket'])){
    $basket_length=sizeof($_SESSION['Basket']);
    for($i=0;$i<$basket_length;$i++) {
        if(isset($_SESSION['Basket'][$i])) {
            echo $_SESSION['Basket'][$i]['ProductID'] . " - " . $_SESSION['Basket'][$i]['Name'] . " - " . $_SESSION['Basket'][$i]['Antal'] . " - " . $_SESSION['Basket'][$i]['Price']. " kr." . "<br />"; 
        }
    }
}

function sum_prices( $array, $key ) {
    $sum = 0;
    foreach($array as $sub_array) {
        $sum += $sub_array[$key];
    }
    return $sum;
}

echo  "<p>".sizeof($_SESSION['Basket'])." vare(r) i kurven</p>";
echo "I alt ".sum_prices( $_SESSION['Basket'], "Price")." kr.";

?>
Avatar billede LilleUdvikler Nybegynder
10. september 2011 - 19:06 #4
Det funger, det er dejligt!

Men kan du måske ikke komme med en forklaring på hvad den gør funktionen? Har ikke rigtig forståelse for den.
Avatar billede inteeeL Nybegynder
10. september 2011 - 19:16 #5
Lyder godt!

Det kan du tro. $array og $key er variabler for henholdsvis arrayet og "parametret" i arrayet - i vores tilfælde "Price". Vi smider $_SESSION['Basket'] ind i et loop (foreach), hvor hver enkelt array bliver kørt igennem og adderet til vores $sum.

$sum += $sub_array[$key]; er det samme som følgende:
$sum = $sum + $sub_array[$key]; (blot en forkortelse).

Det kan lyde lidt kompliceret, men læs det igennem et par gange, og du vil opdage logikken.
Avatar billede LilleUdvikler Nybegynder
10. september 2011 - 19:18 #6
Mange tak skal du have :-)
-> Læg et svar, så du flink ;)
Avatar billede inteeeL Nybegynder
10. september 2011 - 19:22 #7
Svar :-)
Avatar billede inteeeL Nybegynder
10. september 2011 - 19:23 #8
Og velbekomme. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester