2016-11-16 7 views
1

私はPHPショッピングカートで作業していますが、同じアイテムの新しいエントリを作成するのではなく、カートのアイテムの数量を更新しようとしています。しかし、すでにカートに入っている製品を入力するとき、私のforeachステートメントはそれを最初の配列値と照合するだけで、その製品の新しいエントリを作成します。foreachは配列の最初の値のみをチェックしてから新しい値を作成します

誰かがこの作業を手伝って、アレイ全体のリストに対してチェックしていない理由を理解できますか?あなたは、それは常に最初の反復の後に壊れることを意味し、ifelseの両方でbreak;を持って

function CheckForExistingEntry($id, $setOf, $quantity) { 
// if the product ID and the SET OF is equal in multiple products, update the quanity instead of making new records 
foreach ($_SESSION['shopping_cart'] as $key => $product) { 
    if ($id == $product['product_id'] && $setOf == $product['setOf']) { 
     // Update Cart Value 
     $_SESSION['shopping_cart'][$key]['quantity'] += $quantity; 
     $_SESSION['shopping_cart'][$key]['price'] *= $_SESSION['shopping_cart'][$key]['quantity']; 
     break; 
    } else { 
     // Add New Cart Value 
     AddToCart($id, $setOf, $quantity); 
     break; 
    } 
} 
} 

答えて

1

は、ここに私の更新方法です。

elseブロックを削除します。ブロックが見つからない場合は、次のアイテムに進みます。

これを試してください(私は変更をコメントしました):

// Define a variable that holds the state. 
$updated = false; 

foreach ($_SESSION['shopping_cart'] as $key => $product) { 
    if ($id == $product['product_id'] && $setOf == $product['setOf']) { 
     // Update Cart Value 
     $_SESSION['shopping_cart'][$key]['quantity'] += $quantity; 
     $_SESSION['shopping_cart'][$key]['price'] *= $_SESSION['shopping_cart'][$key]['quantity']; 

     // Set updated as true and break the loop 
     $updated = true; 
     break; 
    } 
} 

if (!$updated) { 
    // We didn't update any items, add a new item instead 
    AddToCart($id, $setOf, $quantity);  
} 
関連する問題