如果您使用Laravel集合有一个简单的map
,则可以通过执行以下操作轻松访问基本集合:
$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);
});
问题
是否可以访问修改后的items数组,或者可以访问当前状态的集合。
Javascript中的类似库,如lodash,将集合作为第三个参数传递 - Laravel集合没有。
更新/修改
要清楚,我可以做类似的事情(但它打破了链条)。我想做以下,但没有集合的inbetween存储。
$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);
});
答案 0 :(得分:0)
当你在d($items);
内map()
时,它指的是你的原始数组。如果您在var_dump($item)
内map()
进行$items = [ "dog", "cat", "unicorn" ];
$newItems = collect($items)
->reject(function($item) {
// Reject cats, because they are most likely evil
return $item == 'cat';
})->map(function($item) use ($items) {
var_dump( $item );//TODO
});
var_dump( $newItems );//TODO
,则会看到它仅输出 dog 和独角兽。
$(selector).trigger("change");
答案 1 :(得分:0)
您可以通过运行$this->all()
。
$items = collect(["dog", "cat", "unicorn"])
->reject(function($item) {
return $item == 'cat';
})
->map(function($item) {
dd($item); // current item (dog/unicorn);
dd($this->all()); // all items in the collection (dog and unicorn);
});