如何从 laravel 中的会话数组中删除项目
How to remove an item from session array in laravel
这是我有一个会话的问题
session('products')
这实际上是一个包含id的数组
session('products')
array:4 [▼
0 => "1"
1 => "2"
2 => "4"
3 => "1"
]
现在我想删除 4
我该怎么做?我试过方法
session()->pull($product, 'products');
但是没有用!
其他解决方案
session()->forget('products', $product);
也没用
此方法未测试:
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
你 AFAIR 必须首先检索整个数组,编辑它,然后重新设置它。如果你想按产品 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
将第一个参数作为要删除的项目,将第二个参数作为 return 的默认值。你弄错了参数的顺序。尝试:
session()->pull('products'); // You can specify second argument if you need default value
正如我在 source 中看到的那样,Session::forget
需要字符串或数组,因此您应该只指定第一个参数:
session()->forget('products');
如果您有从购物车中删除商品的功能,您可以通过以下方式完成
public function deleteProductoCart(Producto $producto) {
$cart = \Session::get('products');
unset($cart[$producto->id]);
\Session::put('products', $cart);
return redirect()->route('tu-ruta');
}
这是我有一个会话的问题
session('products')
这实际上是一个包含id的数组
session('products')
array:4 [▼
0 => "1"
1 => "2"
2 => "4"
3 => "1"
]
现在我想删除 4
我该怎么做?我试过方法
session()->pull($product, 'products');
但是没有用!
其他解决方案
session()->forget('products', $product);
也没用
此方法未测试:
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
你 AFAIR 必须首先检索整个数组,编辑它,然后重新设置它。如果你想按产品 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
将第一个参数作为要删除的项目,将第二个参数作为 return 的默认值。你弄错了参数的顺序。尝试:
session()->pull('products'); // You can specify second argument if you need default value
正如我在 source 中看到的那样,Session::forget
需要字符串或数组,因此您应该只指定第一个参数:
session()->forget('products');
如果您有从购物车中删除商品的功能,您可以通过以下方式完成
public function deleteProductoCart(Producto $producto) {
$cart = \Session::get('products');
unset($cart[$producto->id]);
\Session::put('products', $cart);
return redirect()->route('tu-ruta');
}