如果你有一个简单map
的使用 Laravel 集合,你可以通过执行以下操作轻松访问基本集合:
$items = [ "dog", "cat", "unicorn" ];
collect($items)->map(function($item) use ($items) {
d($items); // Correctly outputs $items array
});
如果使用带有过滤器/拒绝的流式链,$items 不再代表项目集:
$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);
});
问题
是否可以访问修改后的项目数组,或者可以访问当前状态的集合。
Javascript 中的类似库,如 lodash,将集合作为第三个参数传入 - 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);
});