Laravel 5.1 - 在会话中从数组中删除项目

时间:2016-08-04 11:23:11

标签: php laravel laravel-5 session-variables

我有laravel应用程序,我使用会话将项目存储在一个篮子里。

将项目添加到购物篮的功能

public function addItem($id)
    {
        session()->push('user.basket', $id);
        return back();
    }

从篮子中删除项目的功能

public function removeItem($id)
    {
        session()->pull('user.basket', $id);
        return back();
    }

当我添加物品时,这样可以正常工作,但是当我要移除篮子中的物品时,整个篮子被移除了吗?

2 个答案:

答案 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();
}