gpt4 book ai didi

php - Laravel 排序集合然后按键

转载 作者:可可西里 更新时间:2023-10-31 23:03:24 25 4
gpt4 key购买 nike

我正在为我的用户制作 raking 系统,这是我目前拥有的:

获取所有用户并按点对他们进行排序 - 效果很好。

$users = User::all();
$users = $users->sortByDesc(function($item){
return $item->points()->sum('amount');
});

找到您在排名中的位置 - 效果很好

$position = 0;
foreach($users as $user){
if(Auth::user()->id == $user->id) break;
$position++;
}

让我自己和用户在我之上/之下——这是行不通的。我得到随机用户。看起来集合不再排序。

$myRank = new Collection();
if($position > 9){
$myRank->add($users->get($position-1));
$myRank->add($users->get($position));
$myRank->add($users->get($position+1));
return view('rank.show', ['topTen' => $users->take(15), 'myRank' => $myRank]);
}

请帮助我解决这个问题或对另一种方法提供一些提示(许多记录的重量轻)

最佳答案

我认为问题是这样的:

当你调用 User::all() 时,你会得到这样的结果:

0 => points: 10
1 => points: 50
2 => points: 30
3 => points: 70
4 => points: 20

然后您使用 sortBy 函数对集合重新排序,但不重置键。所以你最终得到这样的东西:

3 => points: 70
1 => points: 50
2 => points: 30
4 => points: 20
0 => points: 10

所以在这里使用位置 -1、位置和位置 +1 是没有意义的。

你可以做的是使用 values() 函数,它将重置你集合的键:

0 => points: 70
1 => points: 50
2 => points: 30
3 => points: 20
4 => points: 10

所以我认为下面的代码可以工作。

$users = User::all();
$users = $users->sortByDesc(function($item){
return $item->points()->sum('amount');
})->values();

然后从positions - 1到position + 1获取3个用户:

$myRank = $users->splice($position - 1, 3);

关于php - Laravel 排序集合然后按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29645598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com