2017-04-04 48 views
0

繼內更新數據是我的PHP代碼:PHP:如何在一個數組是一個數組

while($row = $resp->fetch_assoc()) 
{ 
    $itemArray = array(
     array(
     'name' => $row["product_name"], 
     'id' => $row["id"], 
     'image' => $row['images'], 
     'discount' => $row["discount"], 
     'quantity' => $min_quantity, 
     'price' => $row["price"] 
    ) 
    ); 
} 

if(!empty($_SESSION["cart_item"])) 
{ 
    if(in_array($itemArray, $_SESSION["cart_item"])) 
    { 
     foreach($_SESSION["cart_item"] as $item) 
     { 
      if(in_array($item, $itemArray)) 
       $_SESSION["cart_item"][$item]["quantity"] = $min_quantity; 
      break; 
     } 
    } 
    else 
    { 
     $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray); 
    } 
} 
else 
{ 
    $_SESSION["cart_item"] = $itemArray; 
} 

執行此代碼我得到這樣的迴應後:

Array 
(
[0] => Array 
    (
     [name] => Girls Designer Dress 
     [id] => 4 
     [image] => s:146:"2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am 
.jpg,2017/march/meetfashion01-04-2017_12-19-09_am.jpg"; 
     [discount] => 10 
     [quantity] => 1 
     [price] => 1200 
    ) 

) 

什麼我試圖達到的目的是,如果用戶在購物車中添加了相同的產品,而這些產品的數據我們已經得到響應,而不是再次創建陣列,並將其從12的同一產品的一個接一個的i want to just update the quantity合併。

我堅持在這部分代碼

foreach($_SESSION["cart_item"] as $item) 
{ 
    if(in_array($item, $itemArray)) 
    $_SESSION["cart_item"][$item]["quantity"] = $min_quantity; 
    break; 
} 

我已經嘗試過很多次,如果遇到同樣的產品,然後通過1相同的產品增加的數量和不創建一個以上的陣列。

任何人都可以幫助這個邏輯和代碼?

+0

$ _SESSION [「cart-item」]的價值是什麼?如果它是一個包含購物車信息的數組,那麼循環它並不是一條可行的路。 – FrenchMajesty

+0

是沒有值,則這將在它'陣列 ( [0] =>數組 ( [名稱] =>女孩設計連衣裙 [ID]加入=> 4 [圖像] => S: 146:「2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am .jpg,2017/march/meetfashion01-04-2017_12-19-09_am。 JPG「; [折扣] => 10 [量] => 1 [價格] => 1200 ) )'如果存在,則陣列將被更新,並且該陣列將來自'0'延伸到從'[0] => Array'到'[1] => Array'這樣的'1'我想更新[0]中出現的值 –

回答

1

$ _SESSION [ 「車項目」]單個陣列樣的?

Array 
(
    [name] => Girls Designer Dress 
    [id] => 4 
    [image] => s:146:"2017/march/meetfashion01-04-2017_12-19-07_am.jpg,2017/march/meetfashion01-04-2017_12-19-08_am 
.jpg,2017/march/meetfashion01-04-2017_12-19-09_am.jpg"; 
    [discount] => 10 
    [quantity] => 1 
    [price] => 1200 
) 

如果是的話那就不叫一個foreach,而不只是直接檢查如果車項目是在$ itemArray使用array_search()

(函數在數組中搜索並且如果發現了針,則返回其索引,否則返回false)。

$cartItemPosition = array_search($_SESSION['cart-item'], $itemArray); 

if($cartItemPosition == false) { 
    // Not found in array, so create new entry 
    $itemArray.push($_SESSION['cart-item']); 

}else { 
    // Found in array so edit existing entry 

    $itemArray[$cartItemPosition]['quantity'] = 999; 
} 
+0

以及如果添加新產品會怎樣?它會創建一個新的數組並將其追加到前一次? –

+0

@AkshayShrivastav。你會在'//未找到'循環中這樣做。另外爲什麼重新創建一個新的數組?只需將其附加到已有的。 – FrenchMajesty

+0

這一個完美的工作:)我創建了一個附加數組 –

0

下面的作品,如果$itemArray只有1項:

更改爲:

if(!empty($_SESSION["cart_item"])) 
    { 
     if(in_array($itemArray[0], $_SESSION["cart_item"])) 
      { 
       foreach($_SESSION["cart_item"] as $index => $item) 
        { 
         if(in_array($item, $itemArray)) 
          $_SESSION["cart_item"][$index]["quantity"] = $_SESSION["cart_item"][$index]["quantity"] + 1; 
         break; 
        } 
      } 
     else 
      { 
       $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray); 
      } 
    } 
else 
    { 
     $_SESSION["cart_item"] = $itemArray; 
    } 
  • 添加[0]第一條語句的in_array如果。
  • 在foreach循環中添加$index並使用它。

您的代碼之前從未去過if語句。如果$itemArray始終在數組內部包含一個數組(這就是我們使用[0]的原因),那麼它應該是這樣的。

如果有可能$itemArray有多個項目,那麼我們將不得不根據需要編輯答案。

也不確定,但如果您fetching loop是可能返回多個項目,那麼這是錯誤的,因爲你只會有最後的結果。如果你知道你將只有1個結果,那麼它是一切都很好。

while($row = $resp->fetch_assoc()) 
    { 
     $itemArray = array(
          array(
            'name' => $row["product_name"], 
            'id' => $row["id"], 
            'image' => $row['images'], 
            'discount' => $row["discount"], 
            'quantity' => $min_quantity, 
            'price' => $row["price"] 
           ) 
         ); 
    } 
相關問題