Php 两个foreach循环内的总数之和

Php 两个foreach循环内的总数之和,php,foreach,sum,Php,Foreach,Sum,我有两个循环,一个调用代理,另一个调用一组日期。日期循环位于代理循环内。目的是为每个单独的代理计算内部的行数。我得到的是一个总的总数,而不是我需要的每个代理的单个总数 $company = $_SESSION['user']['company']; $sth = $db->prepare("SELECT id, firstname, lastname, company FROM users WHERE company = '".$company."' AND level = 'user'

我有两个循环,一个调用代理,另一个调用一组日期。日期循环位于代理循环内。目的是为每个单独的代理计算内部的行数。我得到的是一个总的总数,而不是我需要的每个代理的单个总数

$company = $_SESSION['user']['company']; $sth = $db->prepare("SELECT id, firstname, lastname, company FROM users WHERE company = '".$company."' AND level = 'user' AND status = 'Active'");
    $sth->execute();
    $agents = $sth->fetchAll(); 

    foreach($agents as $name){

    $begin = new DateTime($date1);
    $end = new DateTime($date2);

    $daterange = new DatePeriod($begin, new DateInterval('P1D'), $end);                         

    foreach($daterange as $date){

        $salesdates = $date->format("Y-m-d");

        $query = "SELECT unid FROM ".$company."_automated_responses WHERE title = 'Sale' AND date LIKE '".$salesdates."%' AND agent_id = '".$name['id']."'";
        $stmt = $db->prepare( $query );
        $stmt->execute();

        $salescount = $stmt->rowCount();

        if($salescount < 10){ $bonus = 0; }
        else if($salescount < 12){ $bonus = 25; }
        else if($salescount < 14){ $bonus = 40; }
        else if($salescount < 16){ $bonus = 50; }
        else if($salescount < 18){ $bonus = 70; }
        else if($salescount < 20){ $bonus = 85; }
        else if($salescount > 19){ $bonus = 100; }                              

        $total_bonus += $bonus;
        $total_salescount += $salescount;


    }

    echo $total_salescount.' - '.$name['firstname'].' '.$name['lastname'].' - '.$total_bonus.'<br />';

}
$company=$\u会话['user']['company']$sth=$db->prepare(“从company='“$company.”和level='user'和status='Active'”的用户中选择id、firstname、lastname、company);
$sth->execute();
$agents=$sth->fetchAll();
foreach($代理作为$名称){
$begin=新日期时间($date1);
$end=新日期时间($date2);
$daterange=新的日期周期($begin,新的日期间隔($P1D'),$end);
foreach($daterange作为$date){
$salesdates=$date->format(“Y-m-d”);
$query=“从“$company.”中选择unid。“自动”响应,其中标题为“销售”,日期为“.”。$salesdates.“%”,代理为“$name['id']。”;
$stmt=$db->prepare($query);
$stmt->execute();
$salescont=$stmt->rowCount();
如果($salescont<10){$bonus=0;}
如果($salescont<12){$bonus=25;}
如果($salescont<14){$bonus=40;}
如果($salescont<16){$bonus=50;}
如果($salescont<18){$bonus=70;}
如果($salescont<20){$bonus=85;}
如果($salescont>19){$bonus=100;}
$total_bonus+=$bonus;
$total_salescount+=$salescount;
}
echo$total_salescont.'-'.$name['firstname'..'.'.$name['lastname'.].-'.$total_bonus.
; }
这是输出:

125-代理1-115

245-代理2-180

387-代理3-400

517-代理4-540

它应该是这样的:

125-代理1-115

120-代理2-75

142-代理3-220

130-代理4-140


我想您忘了在
foreach($agent as$name)
循环的开头将
$total\u bonus
$total\u salescont
重置为零。如果不重置,这些值在
$name

的不同值之间不断增长。您需要设置$total\u salescont=0;在第一个循环中。这样,当它进入第二个循环时,它将从0开始计数,而不是继续增加已有的计数。

完美,如此简单的解决方案很棒:)