【问题标题】: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
)

我是否遗漏了一些明显的东西?

【问题讨论】:

    标签: php session variables cart unset


    【解决方案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']) 进行比较,检索其密钥并取消设置。

        【讨论】:

          猜你喜欢
          • 2016-11-28
          • 2010-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-10
          相关资源
          最近更新 更多