从会话中删除项目
Posted
技术标签:
【中文标题】从会话中删除项目【英文标题】:Removing items from a session 【发布时间】:2011-04-02 11:45:44 【问题描述】:我在删除购物车项目的会话数组中的项目时遇到问题。以下代码应获取所选项目并将其从会话中删除。然而,最终结果与之前的会话相同,没有任何内容被删除。我通过谷歌搜索看到了类似的问题,但还没有找到可行的解决方案。这是精简后的代码:
<?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
)
我是否遗漏了一些明显的东西?
【问题讨论】:
【参考方案1】:您正在删除 KEY 等于 $removedItem 的项目。在您的示例中,我认为您正在尝试删除 VALUE 等于 removeItem 的元素。在这种情况下,您需要执行一个 foreach 循环来识别键,然后将其删除。
foreach($_SESSION['stuff'] as $k => $v)
if($v == $removeditem)
unset($_SESSION['stuff'][$k]);
【讨论】:
啊,是的,关键与价值是问题所在。奇迹般有效。感谢您的帮助!【参考方案2】:您需要先获取元素的key
,然后再获取unset
。这是您应该使用的代码:
if(($key = array_search($removeditem, $_SESSION['stuff'])) !== FALSE)
unset($_SESSION['stuff'][$key]);
【讨论】:
【参考方案3】:最简单的方法是:
<?php
session_start();
$removeditem = $_GET['item'];
$temp = array_flip($_SESSION['stuff']);
unset($_SESSION['stuff'][$temp[removeditem]]);
?>
附:未经测试...只是一个概念。
【讨论】:
【参考方案4】:7 是数组中的值而不是键,因此使用键 7 取消设置将不起作用。 您要做的是将数组中的每个项目与您要删除的项目 ($_GET['item']) 进行比较,检索其密钥并取消设置。
【讨论】:
以上是关于从会话中删除项目的主要内容,如果未能解决你的问题,请参考以下文章