あなたはLaravelのコレクションを使用して簡単なmap
を持っている場合、あなたは簡単に次のようにして、ベースコレクションにアクセスすることはできません。流暢なチェーンを壊さずにコレクションマップ内のアイテムにアクセスするには?
$items = [ "dog", "cat", "unicorn" ];
collect($items)->map(function($item) use ($items) {
d($items); // Correctly outputs $items array
});
フィルタ/拒否、$項目と流暢なチェーンを使用して、もはやの集合を表している場合は、アイテム:
$items = [ "dog", "cat", "unicorn" ];
collect($items)
->reject(function($item) {
// Reject cats, because they are most likely evil
return $item == 'cat';
})->map(function($item) use ($items) {
// Incorrectly (and obviously) outputs $items array (including "cat");
// Would like to see the $items (['dog', 'unicorn']) here
d($items);
// Will correctly dump 'dog' on iteration 0, and
// will correctly dump 'unicorn' on iteration 1
d($item);
});
質問
は、それが修正さitems配列、またはalternativelのいずれかにアクセスすることが可能ですy、その現在の状態のコレクションにアクセスします。 JavaScriptで
同様のライブラリは、lodashのように、3番目の引数としてコレクションに渡す - Laravelのコレクションにはありません。
更新/編集
明確にするために、私は(それはチェーンを壊す)のような何かを行うことができます。私は次のことをしたいと思いますが、コレクションの中間の記憶はありません。
$items = [ "dog", "cat", "unicorn" ];
$items = collect($items)
->reject(function($item) {
// Reject cats, because they are most likely evil
return $item == 'cat';
});
$items->map(function($item) use ($items) {
// This will work (because I have reassigned
// the rejected sub collection to $items above)
d($items);
// Will correctly dump 'dog' on iteration 0, and
// will correctly dump 'unicorn' on iteration 1
d($item);
});
恐らく私は質問を更新する予定です。私は*全体*にアクセスしようとしていますが、おそらくそれぞれの繰り返し内のコレクションは小さくなります – Chris