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_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;
    }
  }

最新更新