Laravel 集合的 “tap” 方法
在Laravel 5.4.10 就引入了用于集合操作的 tap
方法,该方法可以在不改变原集合的情况下做一些更细致的操作。
下面我们可以通过代码示例更直观的了解 tap
方法的作用,例如:
$items = [
['name' => 'David Charleston', 'member' => 1, 'active' => 1],
['name' => 'Blain Charleston', 'member' => 0, 'active' => 0],
['name' => 'Megan Tarash', 'member' => 1, 'active' => 1],
['name' => 'Jonathan Phaedrus', 'member' => 1, 'active' => 1],
['name' => 'Paul Jackson', 'member' => 0, 'active' => 1]
];
先将数组转为集合,再进行数据的过滤,最后在两个不同的节点调用 tap
方法,返回打印结果:
return collect($items)
->where('active', 1)
->tap(function($collection){
return var_dump($collection->pluck('name'));
})
->where('member', 1)
->tap(function($collection){
return var_dump($collection->pluck('name'));
});
第一次调用 tap
方法输出结果:
David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson
第二次调用 tap
方法输出结果:
David Charleston, Megan Tarash, Jonathan Phaedrus
Tap vs Pipe
Laravel 也提供了另一个类似 tap
的集合操作方法 -- pipe
,两者在集合调用上很类似,却有一个主要的区别:
通过调用 tap
方法不会改变原集合的结果,而 pipe
方法会根据返回值修改元集合的结果。示例如下:
return collect($items)
->where('active', 1)
->pipe(function ($collection) {
return $collection->push(['name' => 'John Doe']);
});
// David Charleston, Megan Tarash, Jonathan Phaedrus, Paul Jackson, John Doe
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。