代码:我对此有一个条件,但对我来说不清楚
$check_account1 = false;
$check_account2 = false;
$user1_amount = 100;
$user2_amount = 100;
if ($account->type == "A") {
$check_account1 = true;
$amount = 100;
if ($check_account1) {
$amount = $user1_amount;
} else {
$amount += $user1_amount;
}
} elseif ($account->type == "B") {
$amount = $user2_amount;
}
$insert = new Amount;
$insert->user_id = $account->id;
$insert->amount = $amount;
$insert->save();
EDIT:我有一个用户的等级为Basic, Junior, Premium, Advanced, Senior
,即每个用户都有基于其rank
的相应数量。如果有人不在场或不可用,则基于其级别的金额将转到他旁边的rank
,如果用户在场,则他将收到基于其rank
的金额。因此,如果Basic, Junior, Premium and Advanced
不存在,则其相应金额的总和将进入Senior
Present意味着它在database table
中,如果循环没有得到具有该rank
的用户,我称之为不存在。
事情就是这样发展的:
Basic - 10
Junior - 20
Premium - 30
Advanced - 40
Senior - 50
$amount_to_transfer = 0;
$amount_to_receive = 0;
foreach($users as $user){
if($user->rank == 'Basic'){
// basic is present, add 10 to himself, if not 10 will go to the next rank which is Junior
$amount->amount = 10;
$amount->save();
}
else{
//
}
}
因为你想循环浏览你的用户,并将金额从那些不存在的用户转移到第一个存在的下一个用户,下面是应该完成这项任务的代码:
$amount_to_transfer = 0;
$amount_to_receive = 100;
foreach($users as $user){
if($user->present){
$user->amount += $amount_to_receive + $amount_to_transfer;
$amount_to_transfer = 0;
// If you want to save the user here
// $user->save();
}
else{
$amount_to_transfer += $amount_to_receive;
}
}
我假设您的用户模型具有present
属性,该属性告诉用户是否存在(布尔值(,并且金额存储在amount
字段中。您可以根据用户模型中的属性调整此条件。
总而言之,您只需要定义一个转账金额,该金额从零开始,并在每次用户出现时将其与收款金额相加。若用户不在场,只需增加要转移的金额,就可以将其添加到第一个下一个在场的用户。
改编
这是经过修改的代码,我使用了伪集合和列。请根据您的设置进行调整。在这个例子中没有高级等级,所以高级将获得50+40的金额。
$ranks = collect([
(object) ['name' => 'Basic', 'amount' => 10],
(object) ['name' => 'Junior', 'amount' => 20],
(object) ['name' => 'Premium', 'amount' => 30],
(object) ['name' => 'Advanced', 'amount' => 40],
(object) ['name' => 'Senior', 'amount' => 50],
]);
$users = collect([
(object) ['rank' => 'Basic', 'amount' => 0],
(object) ['rank' => 'Junior', 'amount' => 0],
(object) ['rank' => 'Premium', 'amount' => 0],
(object) ['rank' => 'Senior', 'amount' => 0],
(object) ['rank' => 'Basic', '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;
// $usr->save();
});
$amount_to_transfer = 0;
}
}