如何使用数字对集合进行分组。所以我创建了一个接受数字的方法,然后使用该数字对返回的集合进行分组,所以如果我传入4,它将按4分组。下面是数据的原始结构。
{
'A': [{
id: 1,
id: 2,
id: 3,
id: 4,
id: 5,
id: 6,
id: 7
}],
'B': [{
id: 1,
id: 2,
id: 3
}],
'C': [{
id: 1,
id: 2,
id: 3,
id: 4
}]
}
现在我希望它以这种方式格式化数据。
{
'A': [{
1: [{
id: 1,
id: 2,
id: 3,
id: 4
}],
2: [{
id: 5,
id: 6,
id: 7
}]
}],
'B': [{
1: {
id: 1,
id: 2,
id: 3
}
}],
'C': [{
1: [{
id: 1,
id: 2,
id: 3,
id: 4
}]
}]
}
这是我的代码。
public function getAllPlayers( num )
{
$data = Player::orderBy('familyName', 'asc')
->join('teams', 'players.primaryClubId', '=', 'teams.clubId')
->select(['players.*', 'teams.teamName', 'teams.teamNickname', 'teams.teamCode'])
->get()
->unique() //remove duplicates
->groupBy(function($item, $key) { //group familyName that starts in same letter
return substr($item['familyName'], 0, 1);
});
return $data;
}
我真的很难在laravel中解决这个问题。顺便说一句我使用5.4版本。任何帮助将非常感谢,提前感谢!
答案 0 :(得分:1)
尝试使用map
函数,如下所示:
$data = Player::orderBy('familyName', 'asc')
->join('teams', 'players.primaryClubId', '=', 'teams.clubId')
->select(['players.*', 'teams.teamName', 'teams.teamNickname', 'teams.teamCode'])
->get()
->unique()
->groupBy(function($item, $key) {
return substr($item['familyName'], 0, 1);
})
->map(function ($subCollection) {
return $subCollection->chunk(4); // put your group size
});