首页 文章

如何使用php $ _SESSION编写一个算法来乘以购物车中的总*数量?

提问于
浏览
-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();未设置($ _ SESSION [ '数量']);未设置($ _ SESSION [ '项目']);未设置($ _ SESSION [ 'PR']);未设置($ _ POST [ '数量']);未设置($ _ POST [ '项']);未设置($ _ 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( $ value,FILTER_SANITIZE_SPECIAL_CHARS)); } foreach($ _ POST ['pr'] as $ key => $ value){if(!$ _ POST ['qty'] [$ key] =='')array_push($ _ SESSION ['pr'],filter_var( $ value,FILTER_SANITIZE_SPECIAL_CHARS)); }>?>

3 回答

  • 0

    这是构建购物车的一种奇怪的方式,但这里是如何使用该结构:

    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,
        )
    );
    
  • 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 
        }
    }
    
  • 1

    你应该自己创建一个 Card 类,它能够从 $_SESSION 超全局导入/导出数据(或者如果你为了测试而模拟其他数组,使用_621303进行测试可能很难),它可以轻松处理你的数据结构 . 计算总数:

    $cart = new Cart();
    $cart->importFromArray($_SESSION);
    // or:
    $cart->importFromArray($_SESSION['cart']);
    
    // later on:
    $total = $cart->getTotal();
    
    // somewhere else:
    $cart->addItem(...);
    ...
    $_SESSION['cart'] = $cart->exportToArray();
    

    这将允许您随着时间的推移更轻松地更改代码 .

相关问题