如何切割分组的Laravel集合

问题描述 投票:0回答:1

我有一个集合,我按特定键分组

$collection = Model::all()->groupBy('section_id');

这给我留下了一个包含几个根节点(部分)的集合,每个节点包含多个项目的集合。

print_r($collection->toArray());

Array
(
    [section_1] => Array
        (
            [0] => stdClass Object
                (
                    [section_id] => section_1
                    ...
                )
            [1] => stdClass Object
                (
                    [section_id] => section_1
                    ...
                )
            [2] => stdClass Object
                (
                    [section_id] => section_1
                    ...
                )
            [0] => stdClass Object
                (
                    [section_id] => section_1
                    ...
                )
        )
    [section_2] => Array
        (
            [0] => stdClass Object
                (
                    [section_id] => section_2
                    ...
                )
            [1] => stdClass Object
                (
                    [section_id] => section_2
                    ...
                )
            [2] => stdClass Object
                (
                    [section_id] => section_2
                    ...
                )
            [0] => stdClass Object
                (
                    [section_id] => section_2
                    ...
                )
        )
)

这很棒,但我现在要做的是将每个部分的项目减少到2。

我尝试了以下,但这似乎不起作用。

$collection->map(function($section)
{
    $reduced_section = $section->slice(0,2);
    return $reduced_section;
});

这是正确的,还是有更好的(工作)方式来实现这一目标?

谢谢

laravel slice
1个回答
2
投票

尝试使用take(2)而直接返回结果。此函数将拉出集合的前两项。

另外,不要忘记将映射的集合分配回变量。 The documentation声明map()函数不会修改集合,但它将返回一个新的修改集合。

$collection = $collection->map(function($section)
{
    return $section->take(2);
});
© www.soinside.com 2019 - 2024. All rights reserved.