2010-08-23 78 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']))进行比较,找回它的密钥并取消它。