-2

ショッピング カートを作成していて、データを $_SESSION 配列に保存していますが、合計を計算したいと考えています。その下に、これを行うのに役立つと思ったコードがありますが、合計ではなく「1」が返されます!

$total = array($_SESSION['qty'],$_SESSION['pr']);

/* もっとコードをあげます...助けてくれてありがとう!! ここに私のphpカートのコードがあります:

<?php

function item_list() { if(isset($_SESSION['qty'])){ $total = array($_SESSION['qty'],$_SESSION['pr']);

    foreach($_SESSION['qty'] as $key => $value)
    {?>
        <tr>
    <td align="center"><?php echo $_SESSION['item'][$key]; ?></td>
    <td align="center"><?php echo $value; ?></td>
    <td align="center"><?php echo $_SESSION['pr'][$key]; ?></td>
    <td align="center"><?php echo array_product($total); ?>
    </tr><?php 
    }
}

}

session_start();

if(isset($_POST['clear']) && ($_POST['clear'] == 'clear')) { session_destroy(); unset($_SESSION['数量']); unset($_SESSION['item']); unset($_SESSION['pr']); unset($_POST['数量']); unset($_POST['item']); unset($_POST['pr']); }

if(!isset($_SESSION['qty'])) $_SESSION['qty'] = array(); if(!isset($_SESSION['item'])) $_SESSION['item'] = array(); if(!isset($_SESSION['pr'])) $_SESSION['pr'] = array();

if(isset($_POST['qty'])) {

foreach($_POST['qty'] as $value)
{
    if(!$value == '') array_push($_SESSION['qty'], filter_var($value, 

FILTER_SANITIZE_SPECIAL_CHARS)); } foreach($_POST['item'] as $key => $value) { if(!$_POST['qty'][$key] == '') array_push($_SESSION['item'], filter_var( $値、FILTER_SANITIZE_SPECIAL_CHARS)); } foreach($_POST['pr'] as $key => $value) { if(!$_POST['qty'][$key] == '') array_push($_SESSION['pr'], filter_var( $値、FILTER_SANITIZE_SPECIAL_CHARS)); }
}

?>

4

3 に答える 3

1

これはショッピング カートを構造化する奇妙な方法ですが、その構造を使用してそれを行う方法を次に示します。

foreach($_SESSION['qty'] as $key => $value)
{
    $total = $_SESSION['qty'][$key] * $_SESSION['pr'][$key];
?>
    <tr>
<td align="center"><?php echo $_SESSION['item'][$key]; ?></td>
<td align="center"><?php echo $value; ?></td>
<td align="center"><?php echo $_SESSION['pr'][$key]; ?></td>
<td align="center"><?php echo $total; ?>
</tr><?php 
}

カートのすべての数量とコストの合計を取得する場合:

function getTotals()
{
    $total = array('qty' => 0, 'price' => 0);

    foreach($_SESSION['qty'] as $key => $qty)
    {
        $total['qty'] += $qty;
        $total['price'] += ($_SESSION['pr'][$key] * $qty)
    }

    return $total;
}

$total = getTotals();

echo $total['qty']; // output the total quantity of items
echo $total['price']; // output the total cost for all items and quantity

ただし、次のようなより良い構造をお勧めします。

$_SESSION['cart']['items'] = array(
    array(
        'name' => 'Screwdriver',
        'price' => 5,
        'qty' => 2,
    ),
    array(
        'name' => 'Hammer',
        'price' => 10,
        'qty' => 1,
    )
);
于 2012-11-23T16:44:45.660 に答える
0

Cardデータ構造を$_SESSION簡単$_SESSIONに処理でき、合計、 それも:

$cart = new Cart();
$cart->importFromArray($_SESSION);
// or:
$cart->importFromArray($_SESSION['cart']);

// later on:
$total = $cart->getTotal();

// somewhere else:
$cart->addItem(...);
...
$_SESSION['cart'] = $cart->exportToArray();

これにより、時間の経過とともにコードをより簡単に変更できます。

于 2012-11-25T00:01:45.157 に答える
0

カートの配列によると、このような多次元配列を使用する必要がある複数の製品を保持することはできません

$_SESSION['cart_items'] = array(
                array( "qty"=>5, "item"=>"tshirt", "pr"=>50.20), 
                array( "qty"=>2, "item"=>"Cell Phone", "pr"=>50.20),
                array( "qty"=>7, "item"=>"", "pr"=>50.20),      
               )

次に、このようにコードを書くことができます

function item_list()    
{

    foreach($_SESSION['cart_items'] as $item_array)
    {?>
        <tr>
    <td align="center">Item:<?php echo $item_array['item']; ?></td>
    <td align="center">Qty: <?php echo $item_array['qty']; ?></td>
    <td align="center">Price :<?php echo $item_array['pr']; ?></td>
    <td align="center">Total : <?php echo $item_array['qty'] * $item_array['pr']; ?>
    </tr><?php 
    }
}
于 2012-11-23T16:45:33.480 に答える