【问题标题】:Increment SESSION amount PHP增加 SESSION 数量 PHP
【发布时间】:2013-04-06 10:27:30
【问题描述】:

我正在使用会话来填充一个简单的购物车,但是,如果 item_id 已经存在于 session['cart'] 中,我在让 itemAmount 递增时遇到了一些问题。

我一直试图在这里增加:$itemAmount = $eachItem['itemAmount']; 但是,无法让它工作。

这是我目前拥有的;

已更新; 具有更好命名的代码,我仍然需要帮助来增加 cart_item_amount,此时它每次都会创建一个新项目,而不是增加cart_item_amount。

<?php
if (!isset($_SESSION)) {
  session_start();
}
// create the cart session
if(!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}
?>
<?php
// if all posts are fine
if(isset($_POST['item_id'])) {

    // set post values
    $post_item_id = $_POST['item_id'];
    $post_item_name = $_POST['item_name'];
    $post_options = $_POST['item_options'];
    $post_item_extras = $_POST['item_extras'];

    // set initial item amount
    $item_total = 1;

    foreach($_SESSION['cart'] as $key => $value) {

        if($value['cart_item_id'] == $post_item_id) {

            $value['cart_item_amount']++;
            $item_total = $value['cart_item_amount'];

        }else{

        }
    }
    // if option selected
    if(isset($post_options)) {

        // split to get two separate values
        list($post_item_cost, $post_option_name) = explode("-", $post_options, 2);

    }

    // loop through extras          
    if(isset($post_item_extras)) {

        foreach($post_item_extras as $key => $value) {

            // split to get two separate values
            list($post_extra_cost, $post_extra_name) = explode("-", $value, 2);

            // create extras array
            $item_extras[] = array(
                'cart_extra_cost' => $post_extra_cost,
                'cart_extra_name' => $post_extra_name
            );

        }
    }

    // add each item to an array
    $cart_row = array(
        'cart_item_id' => $post_item_id,
        'cart_item_name' => $post_item_name,
        'cart_option_name' => $post_option_name,
        'cart_item_cost' => $post_item_cost,
        'cart_item_amount' => $item_total,
        // add the extras array
        'cart_item_extras' => $item_extras 
    );

        // add new row to the session Cart
        $_SESSION['cart'][] = $cart_row;
}
?>

Array
(
    [cart] => Array
        (
            [0] => Array
                (
                    [cart_item_id] => 76
                    [cart_item_name] => Cheese Burger
                    [cart_option_name] => Small
                    [cart_item_cost] => 1.00
                    [cart_item_amount] => 1
                    [cart_item_extras] => 
                )

            [1] => Array
                (
                    [cart_item_id] => 76
                    [cart_item_name] => Cheese Burger
                    [cart_option_name] => Small
                    [cart_item_cost] => 1.00
                    [cart_item_amount] => 2
                    [cart_item_extras] => 
                )

            [2] => Array
                (
                    [cart_item_id] => 76
                    [cart_item_name] => Cheese Burger
                    [cart_option_name] => Small
                    [cart_item_cost] => 1.00
                    [cart_item_amount] => 3
                    [cart_item_extras] => 
                )

        )

)

【问题讨论】:

    标签: php arrays session increment


    【解决方案1】:
    if($eachItem['itemID'] = $_POST['item_id']) {
    

    = 不是比较运算符,请参阅 http://php.net/manual/en/language.operators.comparison.php

    应该是

    if($eachItem['itemID'] == $_POST['item_id']) {
    

    【讨论】:

    • 也用更好的名字,如果还有$itemID的话$item_id就不明显了,还有$item_name和$itemName ...
    • 谢谢错过了,现在开始工作了。我要改名了,我明白你的意思了。
    【解决方案2】:

    简单地使用它就可以了;

    foreach($_SESSION['cart'] as $key => $value) {
    
        if($value['cart_item_id'] == $post_item_id) {
    
             $_SESSION['cart'][$key]['cart_item_amount']++;
    
             return false;
    
    }
    

    【讨论】: