簡體   English   中英

如何從 Laravel Session 中的數組中刪除項目?

[英]How to delete an item from array in Laravel Session?

我正在創建一個購物車系統,這是我將一些項目輸入用戶會話的代碼:

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提醒點符號......

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

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

忘記方法將從會話中刪除一條數據

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

pull 方法將在單個語句中從會話中檢索和刪除項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM