Php laravel条件添加嵌套量

Php laravel条件添加嵌套量,php,laravel,Php,Laravel,代码:我有一个条件,但我不清楚 $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_

代码:我有一个条件,但我不清楚

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

编辑:我有一个用户的排名为
基本、初级、高级、高级
,即每个用户根据其
排名
拥有相应的金额。 如果有人不在场或不可用,基于其排名的金额将转到他旁边的
排名
,如果用户在场,他将根据其
排名
收到金额。因此,如果
基本、初级、高级和高级
不存在,则其相应金额的总和将转到
高级

表示它在
数据库表中
,如果循环没有得到具有该
等级的用户,我称之为缺席

事情是这样的:

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\u to\u transfer=0;
$amount_to_receive=100;
foreach($users作为$user){
如果($user->present){
$user->amount+=$amount\u to\u receive+$amount\u to\u transfer;
$amount_to_transfer=0;
//如果要在此处保存用户
//$user->save();
}
否则{
$amount_to_transfer+=$amount_to_receive;
}
}
我假设您的用户模型具有
present
属性,该属性告知用户是否存在(布尔值),并且金额存储在
amount
字段中。可以根据用户模型中的属性调整此条件

总之,您只需要定义一个转账金额,该金额从零开始,并在每次用户出现时将其与接收金额一起添加。如果用户不在场,只需增加要转账的金额,以便可以将其添加到第一个下一个在场的用户

改编 这是经过修改的代码,我使用了虚拟集合和列组。请根据您的设置调整此设置。在本例中,没有高级等级,因此高级将获得50+40的金额

$ranks=collect([
(对象)['name'=>Basic','amount'=>10],
(对象)['name'=>Junior','amount'=>20],
(对象)['name'=>Premium','amount'=>30],
(对象)['name'=>Advanced','amount'=>40],
(对象)['name'=>'Senior','amount'=>50],
]);
$users=collect([
(对象)['rank'=>'Basic','amount'=>0],
(对象)['rank'=>'Junior','amount'=>0],
(对象)['rank'=>Premium','amount'=>0],
(对象)['rank'=>'Senior','amount'=>0],
(对象)['rank'=>'Basic','amount'=>0],
]);
$amount_to_transfer=0;
$available_ranks=$users->pull('rank');
foreach($rank为$rank){
如果(!在数组中($rank->name,$available\u ranks->toArray())
{
$amount\u to\u transfer+=$rank->amount;
}
否则{
$usersOfThisRank=$users->filter(函数($usr,$key)使用($rank){
返回$usr->rank==$rank->name;
});
$usersOfThisRank->map(函数($usr,$key)使用($rank,$amount\u-to\u-transfer){
$usr->amount+=$rank->amount+$amount\u to\u转账;
//$usr->save();
});
$amount_to_transfer=0;
}
}

你想把逻辑放在一个循环中,检查存储在一个集合/数组中的所有用户吗?是的@lyyka非常感谢lyyka,我们能深入一点吗?因为我还有更多的条件要补充。我将用您的代码更新问题。是的,您可以在第一个if中附加所有条件,或者甚至声明一个函数,该函数将确定用户是否“有资格”接收金额。然后你可以调用该函数并从中返回true/false。lykka,我更新了我的问题,以便可以进一步解释,对不起,我的英语有问题请投票并将答案标记为已接受,以便其他人知道问题已解决