我有一个收藏夹,已按特定键分组
$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;
});
这是对的,还是有更好的(有效的)方法来实现这一目标?
谢谢
答案 0 :(得分:2)
尝试改用take(2)
,然后直接返回结果。此功能将提取集合的前两个项目。
此外,不要忘记将映射的集合分配回该变量。 The documentation指出map()
函数不会修改集合,但会返回新的修改后的集合。
$collection = $collection->map(function($section)
{
return $section->take(2);
});