我有laravel应用程序,我使用会话将项目存储在一个篮子里。
将项目添加到购物篮的功能
public function addItem($id)
{
session()->push('user.basket', $id);
return back();
}
从篮子中删除项目的功能
public function removeItem($id)
{
session()->pull('user.basket', $id);
return back();
}
当我添加物品时,这样可以正常工作,但是当我要移除篮子中的物品时,整个篮子被移除了吗?
答案 0 :(得分:2)
session()->pull('key','default')
方法会移除key
项,如果不存在,则返回default
值。
无法直接从数组中删除项目,您需要实现它:
$array = session()->pull('user.basket',[]);
unset($array[$id]);
session()->put('user.basket',$array);
答案 1 :(得分:0)
您可能知道,数组有值,每个值都有一个键(['key1' => 'value1']
),该值也可能是另一个数组。在您的示例中,您使用了一个数组(user.basket
),每个点代表一个新的数组级别。
按值删除
您将ID推送到会话数组。您没有指定任何密钥,因此它将获得一个未知密钥,因此您希望使用值(您的ID)将其删除。示例中的变量$valueToRemove
是您的ID。
session()->put('user.basket', array_diff(session()->get('user.basket'), [$valueToRemove]));
要解释:将user basket
替换为user basket
中不包含$valueToRemove
的数组中的所有内容。
按键删除
假设您知道要删除的键(位置),例如,如果循环抛出数组foreach(session()->get('user.basket') as $key => $value)
。然后,您可以使用forget
删除特定密钥。
session()->forget('user.basket.'.$keyToRemove); // example: 'user.basket.7'
您的代码
public function removeItem($id)
{
session()->put('user.basket', array_diff(session()->get('user.basket'), [$id]))
return back();
}