0

我在构建 php 脚本以根据数据库中的值自动生成图形时发生的问题。

我在 X 线上列出了所有 12 个月,在 Y 线上列出了每个月的月收入总和。为了在每次我想将月收入总和转换为所有图表上的百分比影响时保持相同大小的图表,为此我将使用简单的公式:

(数组元素/所有数组元素的总和)* 100

这应该告诉所有图形的哪个 % 部分是每个数组元素

代码相当简单:

foreach($years as $year) {
// Do something
    foreach($months as $month) {
        foreach( // this foreach is getting monthly income foreach month \\ ) {
            // so in here we get $total_by_date[$year][$month];
        }
        $year_total[$year] += $total_by_date[$year][$month]; //sum of (sum of each month income)
        ?>
        <div style="background:black;height:20px;width:<?php echo ($total_by_date[$year][$month] / $year_total[$year]) * 100 ?>px;">div> //drawing graph based on given values
        <?php
    }
}

我在各种条件下检查了它,它似乎工作正常,我得到了每年的月份列表,在几个月内我得到了正确显示的每个月的月收入。尽管如此,基本上它不起作用,为了让它充分工作,我需要在开始输出绘制图形之前获得每年的总收入,而不是在扫描和显示来自 foreach 循环的每个元素时,求和函数正在执行数组遍历,所以它的随着每个扫描月的总价值增加,由于 1 月和 2 月的 0 收入,最后给出的错误很少,即使年收入应该是 6700 - 在最初的几个月中显示 2400,然后是 3500,然后是 5400,最后是 12 月的 6700。

我想我需要在 foreach 开始逐月输出之前获得总年收入,问题是我不知道该怎么做。我想出了:

if(empty($year_sub[$year])) { unset($year_sub[$year]); continue; }

放在 div 输出之前,它有一点帮助,它删除了所有最初的 0,所以它不会在开始时崩溃,但仍然在进行求和,这搞砸了这个想法。

也许有人知道如何在输出或其他一些很好的解决方案之前开始和完成求和。先感谢您。

4

1 回答 1

2

您正在打印一年的总数之前的结果(代码未测试)。

foreach($years as $year) {
// Do something
    // 1. Sum of the year
    foreach($months as $month) {
        foreach( // this foreach is getting monthly income foreach month \\ ) {
            // so in here we get $total_by_date[$year][$month];
        }
        $year_total[$year] += $total_by_date[$year][$month]; //sum of (sum of each month income)
    }
    // 2. Convert to % and print
    foreach($months as $month) {
        ?>
        <div style="background:black;height:20px;width:<?php echo ($total_by_date[$year][$month] / $year_total[$year]) * 100 ?>px;">div> //drawing graph based on given values
        <?php
    }
}
于 2013-09-08T19:53:14.407 回答