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);