我在购物车项目中删除会话数组中的项目时遇到问题。以下代码应采用所选项目并将其从会话中删除。然而,最终结果与之前的会话相同,没有删除任何内容。我通过谷歌搜索看到了类似的问题,但还没有找到可行的解决方案。这是精简代码:
<?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
)
我错过了一些明显的东西吗?
答案 0 :(得分:7)
您正在删除KEY等于$ removedItem的项目。从您的示例中我可以看出,您正在尝试删除VALUE等于removedItem的元素。在这种情况下,您需要执行foreach循环以识别密钥,然后将其删除。
foreach($_SESSION['stuff'] as $k => $v) {
if($v == $removeditem)
unset($_SESSION['stuff'][$k]);
}
答案 1 :(得分:3)
您需要首先获取元素的key
,然后unset
。这是你应该使用的代码:
if(($key = array_search($removeditem, $_SESSION['stuff'])) !== FALSE)
unset($_SESSION['stuff'][$key]);
答案 2 :(得分:0)
最简单的方法是:
<?php
session_start();
$removeditem = $_GET['item'];
$temp = array_flip($_SESSION['stuff']);
unset($_SESSION['stuff'][$temp[removeditem]]);
?>
P.S。没有经过测试......只是一个概念。
答案 3 :(得分:0)
7是数组中的值而不是键,因此使用键7取消设置将无法完成任务。 你要做的是将数组中的每个项目与你想要删除的项目进行比较($ _GET ['item']),检索它的键并取消设置。