以下是我目前如何找到多个Laravel集合的交集:
$stuff = [
collect(['a','b','c','d']),
collect(['b','c','d','e']),
collect(['c','d','e','f']),
];
$i = 0;
foreach ($stuff as $current) {
$i++;
if ($i === 1) {
$common = $current;
} else {
$common = $common->intersect($current);
}
}
dd($common);
有更有效的方法吗?以不同方式处理第一个集合似乎有点笨拙(通过if...else...
)。
Laravel拥有许多优秀的收藏方法,我怀疑这个问题有一个更优雅的方法。
答案 0 :(得分:0)
Reduce可能是一个选项:
$intersection = collect([
collect(['a','b','c','d']),
collect(['b','c','d','e']),
collect(['c','d','e','f']),
])->reduce(function ($carry, $item) {
return $carry->empty() ? $item : $carry->intersect($item);
});