【问题标题】:How to delete an item from array in Laravel Session?如何从 Laravel Session 中的数组中删除一个项目?
【发布时间】:2017-03-31 00:52:33
【问题描述】:

我正在创建一个购物车系统,这是我在用户会话中输入一些项目的代码:

public function jsonResponse($data){
    return response()->json([
        'success' => true,
        'users' => $data
    ]);
}

public function post(Request $request ,User $user)
{
    $request->session()->push('users', $user);
    return $this->jsonResponse($request->session()->get('users'));
}

如何从users 数组中删除唯一项?


替代 01

它可以使用以下代码从users 数组中删除项目:

public function delete(Request $request, User $user)
{
    $users = $request->session()->get('users');

    foreach ($users as $key => $val) {
        if($user->id == $users[$key]->id){
            $array = $request->session()->pull('users', []);
            unset($array[$key]);
            $request->session()->put('users', $array);
            return $this->jsonResponse($request->session()->get('users'));
        }
    }

    return $this->jsonResponse($request->session()->get('users'));
}

但我正在寻找一种干净的方式......没有删除数组并将其放回会话......


解决方案01

已找到以下替代代码以获得更简洁的代码:

public function delete(Request $request, User $user)
{
    $users = $request->session()->get('users');

    foreach ($users as $key => $val) {
        if($user->id == $users[$key]->id){
            $request->session()->forget('users.'.$key);
            return $this->jsonResponse($request->session()->get('users'));
        }
    }

    return $this->jsonResponse($request->session()->get('users'));
}

感谢Kyslik提醒点符号...

【问题讨论】:

    标签: php laravel session laravel-5


    【解决方案1】:

    您可以为此使用forget()pull() 方法。

    $request->session()->forget('key');
    

    forget 方法会从会话中删除一条数据

    $request->session()->pull('key', 'default');
    

    pull 方法将在单个语句中从会话中检索和删除项目

    【讨论】:

    • 但是我的 users 键是一个数组,我只需要从数组中删除一个特定项目,而不是整个数组,使用 forget() 方法我只是能够删除整个数组,还是我做错了?
    • 然后pull() 它,进行更改(例如,使用unset())然后push() 它回来。
    • 我已经这样做了,但如果有明确的方法,我想...看看我的编辑...
    • @CaioKawasaki 我不确定,目前无法检查,但尝试使用点符号,->forget('array.key');
    • @Kyslik 我曾尝试过类似:$request->session()->forget('users'.$key),但是当我阅读您的评论时,我去看了代码并意识到我已经让一个细节通过,它的工作原理是这样的:$request->session()->forget('users.'.$key) , 不错 =)
    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 2015-12-19
    • 2016-11-10
    • 2017-08-20
    • 2021-10-19
    • 2017-07-25
    • 2020-07-17
    • 2022-12-26
    相关资源
    最近更新 更多