2016-06-02 4 views
14

私はその要素のいくつかをフェッチしながら、反復して変更したいコレクションを持っています。しかし、取り込んだ要素を削除する手段や方法を見つけることができませんでした。コレクション要素をフェッチした後、コレクション要素の設定を解除(削除)する方法はありますか?

$selected = []; 
foreach ($collection as $key => $value) { 
     if ($collection->selected == true) { 
      $selected[] = $value; 
      unset($value); 
     } 
} 

これはデモンストレーションのための私の質問です。

@Ohgodwhyがforget()関数を助けた後、私は再びそれをチェックして、実際に関数を誤解しているのを見ました。それはまさに私が探していたものでした。以下のデモのようなif文の中に "$ collection-> forget($ key)"を追加したところ、うまくいきました。

$selected = []; 
foreach ($collection as $key => $value) { 
     if ($collection->selected == true) { 
      $selected[] = $value; 
      $collection->forget($key); 
     } 
} 

(これは単なるデモンストレーションである)

+1

私は、配列内のアイテムを保存しないようお勧めしますが、新しいコレクションを作成し、プッシュを通じてそれに要素を追加すると思います。 – Amarnasan

+0

@Amarnasanどうしたらいいですか?私は今はそれが必要ではないが、私は将来それが必要かもしれないと思う。 –

答えて

20
+1

はい、実際に私は忘れてしまった()。私は$キーパラメータがすべての指定されたキーを削除すると思った。今私はif文でループ内で正しく使用することができました。 – Skeletor

+3

'forget()'は 'delete()'や 'remove()'に比べて涼しいですが、地獄をして、アイテムを取り除く方法を知るためにここに来なければなりませんでした:) –

+0

オブジェクト全体? –

3

それとも、rejectmethod

を使用することができますに ->forget()

$collection->forget($key); 

リンクを使用したいと思います210

またはpullmethod

$selected = []; 
foreach ($collection as $key => $item) { 
     if ($item->selected == true) { 
      $selected[] = $collection->pull($key); 
     } 
} 
+1

ですが、拒否の解決策では元のコレクションから要素を削除することはできません。 – Amarnasan

+0

はい、それは元のコレクションをそのまま保持します – huuuk

+0

質問のための完全な解決策は、2番目のものでしょう。 – Amarnasan

関連する問題