简体   繁体   English

在foreach循环PHP中汇总记录

[英]Sums records inside foreach loop PHP

I'm using php laravel, Lets suppose below $records is an array and has only 3 records, the foreach loop will run 3 times. 我正在使用php laravel,让我们假设$records下面是一个数组,只有3条记录,foreach循环将运行3次。

foreach ($records as $record) {
// Here im using query to get logs against each record id.
$logs = "SELECT delivery, COUNT(*) as logs FROM logs where id = 
$record['id] group by delivery"; 

// Run query and it returns array
var_dump($logs)


}

This dump query gets records like this.. 此转储查询获取这样的记录。

1st time 第一次

array (size=2)
  0 => 
    array (size=2)
      'delivery' => string '0' (length=1)
      'logs' => string '1' (length=1)
  1 => 
    array (size=2)
      'delivery' => string '1' (length=1)
      'logs' => string '1' (length=1)

2nd time 第二次

array (size=1)
  0 => 
    array (size=2)
      'delivery' => string '1' (length=1)
      'logs' => string '1' (length=1)

3rd time 第三次

array (size=2)
  0 => 
    array (size=2)
      'delivery' => string '0' (length=1)
      'logs' => string '1' (length=1)

  1 => 
    array (size=2)
      'delivery' => string '1' (length=1)
      'logs' => string '1' (length=1)

I want to calculate records like 我想计算记录

  • Total SMS; 短信总数; // In above example, total are 5 //在上面的示例中,总数为5
  • Total Delivered; 已交付总数; // In above example, Delivered are 3 //在上面的示例中,“已交付”为3
  • Total Failed: // In above example, Failed are 2 失败总数://在上面的示例中,失败是2

Here is how i'm calculating If delivery = 0 , it means failed, if delivery = 1, it means delivered, So there are 3 delivered and 2 failed in above scenario. 这是我计算的方式,如果delivery = 0,则表示失败,如果delivery = 1,则表示已交付,因此在上述情况下有3交付,而2则失败。

Here is what i have tried but it not giving me correct result. 这是我尝试过的方法,但没有给我正确的结果。

$logsSENT = $logsFailed = 0;
                    foreach ($logs as $log) {
                        if($log['delivery'] == 1) {
                            $logsSENT +=  $log['logs'] * $smsConsumedPerMessage;
                        }

                        if($log['delivery'] == 0) {
                            $logsFailed +=  $log['logs'] * $smsConsumedPerMessage;
                        }
                    }

$total_sms += $logsSENT + $logsFailed;

BTW 'logs' => string '1' (length=1) Logs value can be more than 1, It can be 2, 3 etc.. BTW'logs 'logs' => string '1' (length=1)日志值可以大于1,可以为2,3等。

Secondly, In my IFs I'm multiplying it with 1 for example $logsSENT = $logs[1]['logs'] * 1; 其次,在我的IF中,我将其乘以1,例如$logsSENT = $logs[1]['logs'] * 1; 1 is only for above example, It can be changed later to 2, 3 etc 1仅用于上面的示例,以后可以更改为2、3等

<?php
$array = array(
    array(
        array("delivery" => 0, "logs" => 1),
        array("delivery" => 1, "logs" => 1)
    ),
    array(
        array("delivery" => 1, "logs" => 1)
    ),
    array(
        array("delivery" => 0, "logs" => 1),
        array("delivery" => 1, "logs" => 1)
    )
);

$sum = $deliver = $failed = 0;
foreach ($array as $value) {

    $i=$j=1;
    foreach ($value as $va) {
        if($va['delivery']) {
            $deliver = $deliver + $i;
            $i++;
        } else {
            $failed = $failed + $j;
            $j++;
        }
    }
}
echo 'Total:' .($deliver + $failed).'<br>';
echo 'Deliver: '.$deliver.'<br>';
echo 'Failed: '.$failed.'<br>';

?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM