2010-08-23 53 views
0

我在購物車項目中刪除會話數組中的項目時遇到問題。以下代碼應該將所選項目從會話中刪除。然而,最終結果與之前的會話沒有任何關係。我看到類似的問題,谷歌搜索,但還沒有找到一個工作解決方案。這裏是精簡代碼:刪除會話中的項目

<?php 
session_start(); 
$removeditem = $_GET['item']; // this identifies the item to be removed 
unset($_SESSION['stuff'][$removeditem]); // "stuff" is the existing array in the session 
?> 

這裏是什麼的print_r給出了以下(使用「7」爲已刪除的項目爲例):

$removeditem: 
7 

$_SESSION['stuff'] (before and after removal) 
Array 
(
    [0] => 7 
    [1] => 24 
    [2] => 36 
) 

我失去了一些東西明顯?

回答

7

您正在使用KEY等於$ removedItem刪除項目。從你的例子看來,你試圖刪除VALUE等於removedItem的元素。在這種情況下,您需要執行foreach循環來識別密鑰,然後將其刪除。

foreach($_SESSION['stuff'] as $k => $v) { 
    if($v == $removeditem) 
    unset($_SESSION['stuff'][$k]); 
} 
+0

啊是的,關鍵與價值是問題。奇蹟般有效。謝謝您的幫助! – funfetti 2010-08-23 16:17:01

+0

這對我來說非常合適。謝謝。 – 2016-10-13 14:26:49

3

首先,您需要獲得元素的key,然後unset它。下面的代碼,你應該使用:

if(($key = array_search($removeditem, $_SESSION['stuff'])) !== FALSE) 
    unset($_SESSION['stuff'][$key]); 
0

最簡單的方法是:

<?php 

    session_start(); 
    $removeditem = $_GET['item']; 

    $temp = array_flip($_SESSION['stuff']); 

    unset($_SESSION['stuff'][$temp[removeditem]]); 

?> 

附:沒有測試...只是一個概念。

0

7是陣列中的值不是關鍵,因此用關鍵字7取消設置不會完成任何工作。 你需要做的是將數組中的每個項目與你想要刪除的項目($ _GET ['item']))進行比較,找回它的密鑰並取消它。