我有一个集合,我按特定键分组
$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;
});
这是正确的,还是有更好的(工作)方式来实现这一目标?
谢谢
尝试使用take(2)
而直接返回结果。此函数将拉出集合的前两项。
另外,不要忘记将映射的集合分配回变量。 The documentation声明map()
函数不会修改集合,但它将返回一个新的修改集合。
$collection = $collection->map(function($section)
{
return $section->take(2);
});