Laravel Collections:寻找交叉路口

时间:2018-02-09 04:22:01

标签: laravel collections

以下是我目前如何找到多个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拥有许多优秀的收藏方法,我怀疑这个问题有一个更优雅的方法。

1 个答案:

答案 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);
});