如何分割成组的Laravel集合

时间:2019-03-22 09:12:17

标签: laravel slice

我有一个收藏夹,已按特定键分组

$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;
});

这是对的,还是有更好的(有效的)方法来实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:2)

尝试改用take(2),然后直接返回结果。此功能将提取集合的前两个项目。

此外,不要忘记将映射的集合分配回该变量。 The documentation指出map()函数不会修改集合,但会返回新的修改后的集合。

$collection = $collection->map(function($section)
{
    return $section->take(2);
});