Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “添加到购物车”函数创建了错误的数组_Php_Arrays_Session_Shopping Cart - Fatal编程技术网

Php “添加到购物车”函数创建了错误的数组

Php “添加到购物车”函数创建了错误的数组,php,arrays,session,shopping-cart,Php,Arrays,Session,Shopping Cart,我尝试将产品添加到购物车中,但循环逻辑有一些问题。 此功能应添加新产品,并检查产品id是否已在购物车中。如果在购物车中,则应向现有产品或用户选择的数量添加1。 以下是我的一些代码: function AddToCart($pid, $q) { $quantity = $q; $product_id = $pid; if (is_array($_SESSION['products'])) { foreach($_SESSION['products'] as $key => $

我尝试将产品添加到购物车中,但循环逻辑有一些问题。 此功能应添加新产品,并检查产品id是否已在购物车中。如果在购物车中,则应向现有产品或用户选择的数量添加1。 以下是我的一些代码:

function AddToCart($pid, $q)
{
$quantity = $q;
$product_id = $pid;
if (is_array($_SESSION['products']))
    {
    foreach($_SESSION['products'] as $key => $my_value)
        {
        if ($pid === $my_value['product_id'])
            {
            if ($quantity != 1)
                {
                $quantity = $my_value['quantity'] + $quantity;
                $_SESSION['products'][$key]['quantity'] = $quantity;
                }
              else
                {
                $quantity = $my_value['quantity'] + 1;
                $_SESSION['products'][$key]['quantity'] = $quantity;
                }
            }
          else
            {
            $_SESSION['products'][] = array(
                'product_id' => $product_id,
                'quantity' => $quantity,
            );
            }
        }
    }
  else
    {
    $_SESSION['products'][] = array(
        'product_id' => $product_id,
        'quantity' => $quantity,
    );
    }
}
$会话的var_转储将如下所示:

   array(8) { 
   [0]=> array(2) { ["product_id"]=> int(4) ["quantity"]=> int(1) } 
   [1]=> array(2) { ["product_id"]=> int(10) ["quantity"]=> int(1) } 
   [2]=> array(2) { ["product_id"]=> int(11) ["quantity"]=> int(2) } 
   [3]=> array(2) { ["product_id"]=> int(11) ["quantity"]=> int(3) } 
   [4]=> array(2) { ["product_id"]=> int(12) ["quantity"]=> int(2) } 
   [5]=> array(2) { ["product_id"]=> int(12) ["quantity"]=> int(3) } 
   [6]=> array(2) { ["product_id"]=> int(12) ["quantity"]=> int(4) } 
   [7]=> array(2) { ["product_id"]=> int(12) ["quantity"]=> int(5) } } 

虽然我只添加了4个产品:ID4、10、11和12,但在我添加了第三个新产品之后,如果($pid==$my_值['product_id']){$\u会话['products'][$key]['quantity']+=$q;}而不是{$\u会话['products'][]=array,则条件将运行('product_id'=>$pid,'quantity'=>$q);}我得到了相同的结果。很抱歉,代码完全错了。如果仍然需要,请尝试新版本。非常感谢!:)我对代码做了一点更改,现在可以正常工作了:)
function AddToCart($pid, $q){  
    if(!is_array($_SESSION['products'])){
        $_SESSION['products'] = array();
    }
    foreach($_SESSION['products'] as $key=>$my_value){
        if($pid === $my_value['product_id']){
            $_SESSION['products'][$key]['quantity'] += $q;
            return true;
        }   
    }
    $_SESSION['products'][] = array('product_id' => $pid,
                                    'quantity' => $q);
    return true;
}