如何在laravel中删除session数组中的元素

kuhbmx9i  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(97)

问题是我有个疗程

session('products')

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

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

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

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

但是没有用!
其他解决方案

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

同样也不起作用

x7yiwoj4

x7yiwoj41#

你AFAIR必须首先检索整个数组,编辑它,然后再次设置它.如果你想通过产品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

正如我在源代码中看到的,Session::forget需要字符串或数组,所以你应该只指定第一个参数:

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

toe950272#

此方法未经测试:

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
nkhmeac6

nkhmeac63#

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

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

jei2mxaa4#

我也在寻找这个功能,但最终还是这样做了。由于您要删除的是按值,因此此方法也是为一次性删除多个产品而构建的!
比如说;从带有产品的购物车中移除产品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);

相关问题