Php 将数据库结果表转换为聚合类似值的有意义输出

Php 将数据库结果表转换为聚合类似值的有意义输出,php,Php,我从数据库中得到一个结果表,如下所示 +-------------+------------+--------+---------------+--------------+ | subject | payment | amount | student_count | total_amount | +-------------+------------+--------+---------------+--------------+ | Mathematics | 2018 May

我从数据库中得到一个结果表,如下所示

+-------------+------------+--------+---------------+--------------+
| subject     | payment    | amount | student_count | total_amount |
+-------------+------------+--------+---------------+--------------+
| Mathematics | 2018 May   |    500 |             9 |         4500 |
| Mathematics | 2018 May   |    250 |             1 |          250 |
| Mathematics | 2018 April |    500 |            13 |         6500 |
+-------------+------------+--------+---------------+--------------+
我想生成一个总结,从这个如下发送短信摘要

Mathematics
-
2018 May
500*9=4500
250*1=250
Total=4750
-
2018 April
500*13=6500
Total=6500
-
Net Total=11250
我可以通过以下PHP代码获得详细信息,而无需Totalnettotal。在我的代码总结中,由于在
foreach
中无法识别表的最后一行,因此导致了一个问题

$subject = '';
$payment = '';
$amount = '';

foreach($result as $row){
  if($subject != $row['subject']){
    $subject = $row['subject'];
    echo "\n-\n".$subject;
    $payment = '';
  }
  if($payment != $row['payment']){
    $payment = $row['payment'];
    echo "\n-\n".$payment;
    $amount = '';
  }
  if($amount != $row['amount']){
    $amount = $row['amount'];
    echo "\n".intval($amount)."*".$row['student_count']."=".intval($row['total_amount']);
  }
}

如果有人能够帮助您获得预期的输出,我们将不胜感激。

在这种情况下,当您在对前几行的数据求和后进行计数并在循环中输出时,您始终必须对最后一行进行最终输出。在循环之后,您只需要一些额外的输出:

$total=0;
$grandtotal=0;
foreach($result as $row){
   if($subject != $row['subject']){
     echo 'Net total= '.$grandtotal;
     $grandtotal=0;
     $subject = $row['subject'];
     echo "\n-\n".$subject;
     $payment = '';
   }
   if($payment != $row['payment']){
     echo 'Total= '.$total;
     $total=0;
     $payment = $row['payment'];
     echo "\n-\n".$payment;
     $amount = '';
   }
   if($amount != $row['amount']){
      $amount = $row['amount'];
      echo "\n".intval($amount)."*".$row['student_count']."=".intval($row['total_amount']);
      $grandtotal+=$row['total_amount'];
      $total+=$row['total_amount'];
   }
}
//Flush final data 
echo 'Total= '.$total;
echo 'Net Total= '.$grandtotal
它看起来很优雅,但我从来没有找到一个解决这个问题的方法。
另外,您真的想要
如果($amount!=$row['amount'])
这不会跳过金额匹配的行吗?

我稍微调整了答案以正确输出内容。谢谢你的回答。这很有帮助。