![](/img/trans.png)
[英]Group array or laravel collection with similar objects and add count
[英]Laravel, how to group a collection by a count
如何使用數字對集合進行分組。 因此,我做了一個接受數字的方法,然后使用該數字對返回的集合進行分組,因此,如果我傳入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版本。 任何幫助將不勝感激,在此先感謝!
嘗試使用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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.