【发布时间】:2022-10-07 22:27:22
【问题描述】:
我正在尝试在排行榜上创建用户列表。
就我而言,我有相同数量的用户,因此我想跳过下一个X排名数量见下表:
IE
Position | Points
1 100
2 50
2 50
3 30
4 20
4 20
6 10
我几乎到处都看过这个例子,我能找到的壁橱是this SO answer 但是他们似乎已经完成了一半的工作,他们没有显示第二 (2) 个位置或第二个第 5 个位置,我需要显示所有位置。
这是我的代码(我尝试像其他答案一样删除 values() 但它只是使 $key 成为点值)
$ranks = $bets->groupBy('user_id')
->transform(function ($userGroup) {
// Set initial points value.
$points = 0;
// Map over the user group.
$userGroup->map(function ($user) use (&$points) {
// Assign points.
$points = $points + $user->points;
});
// Set the first users points format.
$userGroup->first()->user->points = number_format((float) $points, 2, '.', '');
// Return the first user.
return $userGroup->first()->user;
})
->sortByDesc('points')->groupBy('points')
->values()
->transform(function ($userGroup, $key) {
// Return the transformed usergroup.
return $userGroup->transform(function ($user) use ($key) {
// Set the user's position.
$user->position = $key + 1;
// Return the user.
return $user;
});
})
电流输出
collection
array
0 => usercollection
0 => usercollection (position = 1)
1 => usercollection
0 => usercollection (position = 2)
1 => usercollection (position = 2)
2 => usercollection
0 => usercollection (position = 3)
3 => usercollection
0 => usercollection (position = 4)
1 => usercollection (position = 4)
4 => usercollection
0 => usercollection (position = 5)
预期结果
collection
array
0 => usercollection
0 => usercollection (position = 1)
1 => usercollection
0 => usercollection (position = 2)
1 => usercollection (position = 2)
2 => usercollection
0 => usercollection (position = 4)
3 => usercollection
0 => usercollection (position = 5)
1 => usercollection (position = 5)
4 => usercollection
0 => usercollection (position = 6)
【问题讨论】:
标签: php sql laravel rank leaderboard