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

问题描述 投票:0回答:4

这是我参加会议时遇到的问题

session('products')

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

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

现在我想删除

4
我该怎么做?我试过方法

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

但是没有成功!

其他解决方案

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

也没有成功

php laravel session laravel-5 laravel-5.3
4个回答
19
投票

您必须首先检索整个数组,对其进行编辑,然后再次设置。如果您想按产品 ID 删除(我假设是一个数组值),您可以使用以下命令:PHP 数组按值删除(而不是键)

$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');

5
投票

此方法未经测试:

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

0
投票

如果您有从购物车删除商品的功能,可以按以下方式操作

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

0
投票

也在寻找这个功能,但最终是这样做的。由于您想要删除它按值,因此此方法也是为一次性删除多个产品而构建的!

例如;从包含产品的购物车中删除产品 ID 5、11 和 541)...

// Get the current session products
$products = session()->get('products');

// Remove certain products
$products = array_diff($products, [5, 11, 541]);

// Set the session with the new altered products
session()->put('products', $products);
© www.soinside.com 2019 - 2024. All rights reserved.