在laravel会话中删除列表数组中的数组

时间:2018-03-19 17:58:02

标签: php laravel

我有一个会话来保存laravel中的购物车信息,如下所示:

$item = [
          'id' => 1,
          'product_id' => 11
        ];

$item2 = [
          'id' => 2,
          'product_id' => 22
        ];
        \Session::push('cart', $item); 
        \Session::push('cart', $item2);

现在我要删除$id=1数组中的Item:

foreach(\Session::get('cart') as $cart)
{
    if($id==$cart['id'])
    {
       echo 'done';
       \Session::forget('cart.' . $i);
    }
    $i++;
}

它打印done,但无法删除列表中的该项目。

我错了什么?

我也尝试\Session::pull('card.id', $id);

修改

dd(\Session::get('cart'))

array:4 [▼
  2 => array:5 [▼
    "id" => 1
    "product_id" => "11"
  ]
  3 => array:5 [▶]
  4 => array:5 [▶]
  5 => array:5 [▶]
]

所以我尝试将代码更改为:

foreach(\Session::get('cart') as $key->$cart)
{
    if($id==$cart['id'])
    {
       \Session::forget('cart.' . $key);
    }
}

但它也不能删除

1 个答案:

答案 0 :(得分:1)

我非常确定cart.{$id}不是会话密钥,因为您只是明确设置cart,这是array。这应该适合你:

$id = 1; // set from request, etc.
$cartSession = session()->get("cart");
foreach($cartSession AS $index => $cart){
  if($index == $id){
    unset($cartSession[$index]);
  }
}
session()->put("cart", $cartSession);

基本上,您将会话拉到变量(array),然后循环unset $index匹配$id,然后设置剩余的array回到"cart"

注意:我使用的是session()而不是\Session,这只是Facade vs全局函数;不应该对你使用哪个产生影响,除非低于某个Laravel版本(<*我相信)