2016-08-04 36 views
2

私はlaravelアプリケーションを持っており、セッションを使用して項目をバスケットに格納します。バスケットに項目を追加Laravel 5.1 - セッション中の配列から項目を削除する

機能

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

バスケットから項目を削除する機能

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

私はアイテムを追加すると、私はアイテムを削除するために来るしかしとき、これは、正常に動作しますそれはバスケットにあり、バスケット全体が取り除かれていますか?

+0

http://stackoverflow.com/questions/21242401/delete-items-from-laravel-session-array –

+0

は同じで複数の要素を格納し、アプリケーションをサポートしていますバスケットの中のイド? –

答えて

2

keyで項目を削除し、存在しなければdefaultの値を返します。

直接配列から項目を削除する方法は、あなたがそれを実装する必要はありません。

$array = session()->pull('user.basket',[]); 
unset($array[$id]); 
session()->put('user.basket',$array); 
0

あなたはおそらく知っているように、配列は値を持ち、それぞれの値は、キー(['key1' => 'value1'])が、値はできます別の配列でもあります。あなたの例では、配列(user.basket)を使用していますが、各ドットは配列の新しいレベルを表します。

あなたはセッションアレイにあなたのIDを押して値

で削除します。あなたはキーを指定しないので、未知のキーを取得するので、値(ID)を使用してキーを削除したいとします。この例の変数$valueToRemoveがあなたのIDです。

session()->put('user.basket', array_diff(session()->get('user.basket'), [$valueToRemove])); 

説明するために:のみ$valueToRemoveを含む配列ではありませんuser basketのすべてでuser basketを交換してください。

キー

により削除し、あなたがループ配列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(); 
} 
関連する問題