会话数组取消设置和删除行

Posted

技术标签:

【中文标题】会话数组取消设置和删除行【英文标题】:Session array unset and delete row 【发布时间】:2015-08-24 03:54:54 【问题描述】:

我得到一个产品的 id 并尝试从我的会话数组中删除。我使用 unset 并且一切顺利,但是当我尝试在循环中显示数据时会话仍然有已删除的行,所以我收到错误未定义偏移量:0。 我使用第二个会话,它只有第一个的计数,所以当我删除一行时它工作正常。但是当我尝试对多维会话($_SESSION['cart'] = $_SESSION['cart'] - 1;) 它不起作用,我收到错误 Unsupported operand types..

总而言之,我需要从会话数组中删除特定数据,当我使用 unset 时,它确实会删除它,但如果我有 3 个产品,则数组仍然具有所有索引,我删除第二个产品,当我显示它们时数组仍然有索引 0,1,2..

这是我的代码

$cart = $_SESSION['cart'];
$c=$_SESSION['c'];

$id=$_GET['id'];


unset($_SESSION['c'][$id]);
unset($_SESSION['cart'][$id]);


$_SESSION['c'] = $_SESSION['c'] -1;
$_SESSION['cart'] = $_SESSION['cart'] -1;

【问题讨论】:

从外观上看,您试图从数组中减去一个 int。这没有意义。因为$_SESSION['c'] 实际上是一个数组,而不是一个 int(或浮点数,或其他)。 我知道我实际上尝试减少数组的索引,但不知道如何。 啊,那是完全不同的事情。就做$_SESSION['c'] = $_SESSION[VALUE YOU WANT GOES HERE]. 所以基本上重写了$_SESSION的索引c 好吧 $_SESSION['c'] = $_SESSION['c'] -1;这条线有效我对这条线有问题 $_SESSION['cart'] = $_SESSION['cart'] -1;会话数组有 3 个产品,当我删除其中一个时,数组仍然有 3 个产品,但我未设置的那个是空的,所以数组有 1 个我不会为空的空单元格,我只想删除它,所以 2 个产品将“向上”并具有索引 0 和 1 .. 这有意义吗?对不起.. 所以你想改变数组键并对其进行基本排序? 【参考方案1】:

替换

$_SESSION['c'] = $_SESSION['c'] -1; 

$_SESSION['c'] = array_values($_SESSION['c']);

"-1" 将引发错误,因为您试图从 N 维数组中减去数值。 array_values 将在取消设置/删除操作完成后返回更新的 $_SESSION['c']。

附:也为 $_SESSION['cart'] 相应地更新您的代码。

【讨论】:

$_SESSION['c'] = array_values($_SESSION['c']);解决了我的问题,非常感谢

以上是关于会话数组取消设置和删除行的主要内容,如果未能解决你的问题,请参考以下文章

单击时从会话数组中取消设置某些项目?

问题删除会话变量

根据数组中的值取消设置特定会话项

如何在 PHP 中取消设置会话数组

取消设置 php 会话变量

通过引用取消设置会话不起作用