如何从 laravel 中的会话数组中删除项目

Posted

技术标签:

【中文标题】如何从 laravel 中的会话数组中删除项目【英文标题】:How to remove an item from session array in laravel 【发布时间】:2017-07-25 09:23:32 【问题描述】:

这是我有一个会话的问题

session('products')

这实际上是一个包含 id 的数组

session('products')
array:4 [▼
0 => "1"
1 => "2"
2 => "4"
3 => "1"
]

现在我想删除让我们说4 我该怎么做?我试过方法

session()->pull($product, 'products');

但是没有用!

其他解决方案

session()->forget('products', $product);

它也没有工作

【问题讨论】:

你只有价值还是钥匙也有? Delete items from Laravel Session array的可能重复 @LucaJung 只有值 【参考方案1】:

如果您有从购物车中删除商品的功能,您可以通过以下方式进行操作

public function deleteProductoCart(Producto $producto) 
    $cart = \Session::get('products');
    unset($cart[$producto->id]);
    \Session::put('products', $cart);
    return redirect()->route('tu-ruta');

【讨论】:

感谢您尝试回答问题。堆栈溢出requires content to be in English。请考虑用英语重写您的答案。【参考方案2】:

您必须首先检索整个数组,对其进行编辑然后重新设置。如果你想按产品 ID 删除,我假设是一个数组值,你可以使用这个:php array delete by value (not key)

$products = session()->pull('products', []); // Second argument is a default value
if(($key = array_search($idToDelete, $products)) !== false) 
    unset($products[$key]);

session()->put('products', $products);

被误解的问题

Session::pull 将第一个参数作为要删除的项目,将第二个参数作为要返回的默认值。你弄错了参数的顺序。试试:

session()->pull('products'); // You can specify second argument if you need default value

正如我在source 中看到的,Session::forget 需要字符串或数组,因此您应该只指定第一个参数:

session()->forget('products');

【讨论】:

这就是我要找的东西,感谢十亿的解释:)【参考方案3】:

此方法未经测试:

Session::forget('products.' . $i);

注意这里的点符号,值得一试。如果这不起作用,您可以随时这样做:

$products = Session::get('products'); // Get the array
unset($product[$index]); // Unset the index you want
Session::set('products', $products); // Set the array again

【讨论】:

以上是关于如何从 laravel 中的会话数组中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 会话数组中删除变量

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

如何从 PHP 中的多维关联数组中删除项目

如何从由类中的函数组成的数组中删除项目?

如何使用会话数组从数据库选择中提取项目?

Laravel 不会删除/更新会话