Php 如果列组不存在,则在循环中添加数量
我对每个用户都有一个排名,可以告诉他们将收到多少金额。但是,如果具有该排名的用户不存在,它将遍历下一个用户,因为排名是有序的 排名(按顺序): 这些列组中的每个列组都有相应的值,如果该值不存在,则该值将添加到下一个用户。我只是想问一下我的代码是否正常,或者可以重构 我的代码:Php 如果列组不存在,则在循环中添加数量,php,laravel,loops,Php,Laravel,Loops,我对每个用户都有一个排名,可以告诉他们将收到多少金额。但是,如果具有该排名的用户不存在,它将遍历下一个用户,因为排名是有序的 排名(按顺序): 这些列组中的每个列组都有相应的值,如果该值不存在,则该值将添加到下一个用户。我只是想问一下我的代码是否正常,或者可以重构 我的代码: $ranks = collect([ (object) ['name' => 'Basic', 'amount' => 50], (object) ['name' => 'Junior',
$ranks = collect([
(object) ['name' => 'Basic', 'amount' => 50],
(object) ['name' => 'Junior', 'amount' => 100],
(object) ['name' => 'Premium', 'amount' => 150],
(object) ['name' => 'Advanced', 'amount' => 200],
(object) ['name' => 'Senior', 'amount' => 250],
]);
$users = collect([
(object) ['rank' => 'Basic', 'amount' => 0],
(object) ['rank' => 'Junior', 'amount' => 0],
(object) ['rank' => 'Premium', 'amount' => 0],
(object) ['rank' => 'Senior', 'amount' => 0],
]);
$amount_to_transfer = 0;
$available_ranks = $users->pluck('rank');
foreach($ranks as $rank){
if(!in_array($rank->name, $available_ranks->toArray()))
{
$amount_to_transfer += $rank->amount;
} else {
$usersOfThisRank = $users->filter(function($usr, $key) use($rank){
return $usr->rank == $rank->name;
});
$usersOfThisRank->map(function($usr, $key) use($rank, $amount_to_transfer){
$usr->amount += $rank->amount + $amount_to_transfer;
});
}
}
dd($amount_to_transfer);
假设您将继续使用
(object)
,下面是我的方法。这样我们就不需要那么多的变量,而且更短
我假设每个等级只有一个用户
<代码>$累计=0;
$ranks->each(函数($rank)使用(&$contracted,$users){
如果(!$users->contains('rank',$rank->name)){
$累计+=$排名->金额;
}否则{
$user=$users->firstWhere('rank',$rank->name);
$user->amount=$contracted+$rank->amount;
美元累计=0;
}
});
这个问题更适合你能把你的欲望输出包括进来吗,只要做
if(empty($rank)){continue}
我发布了一个更详细的问题。
$ranks = collect([
(object) ['name' => 'Basic', 'amount' => 50],
(object) ['name' => 'Junior', 'amount' => 100],
(object) ['name' => 'Premium', 'amount' => 150],
(object) ['name' => 'Advanced', 'amount' => 200],
(object) ['name' => 'Senior', 'amount' => 250],
]);
$users = collect([
(object) ['rank' => 'Basic', 'amount' => 0],
(object) ['rank' => 'Junior', 'amount' => 0],
(object) ['rank' => 'Premium', 'amount' => 0],
(object) ['rank' => 'Senior', 'amount' => 0],
]);
$amount_to_transfer = 0;
$available_ranks = $users->pluck('rank');
foreach($ranks as $rank){
if(!in_array($rank->name, $available_ranks->toArray()))
{
$amount_to_transfer += $rank->amount;
} else {
$usersOfThisRank = $users->filter(function($usr, $key) use($rank){
return $usr->rank == $rank->name;
});
$usersOfThisRank->map(function($usr, $key) use($rank, $amount_to_transfer){
$usr->amount += $rank->amount + $amount_to_transfer;
});
}
}
dd($amount_to_transfer);