在矩阵表php中创建max和mean行

时间:2018-06-07 04:34:59

标签: php arrays html-table aggregate-functions

我需要帮助创建一行max和每列平均值(月),我尝试创建一行max,但它检索每列的全年最大值。
我还想知道如果要将聚合函数作为列添加,方法是否相同,假设我的新矩阵表将使用行的年份和列的月份?

预期产出:
Day | Jan | Feb | Mar | Apr | May | Jun | ... | Dec | 1 | 3.0 | 0.0 | 0.0 | 0.0 | 5.0 | 1.0 | ... | 1.0 | 2 | 6.0 | 0.0 | 0.0 | 0.0 | 6.0 | 1.0 | ... | 1.0 | 3 | 3.0 | 0.0 | 0.0 | 4.0 | 0.0 | 0.0 | ... | 0.0 | 4 | 4.0 | 1.0 | 0.0 | 3.0 | 0.0 | 0.0 | ... | 0.0 | 5 | 3.0 | 1.0 | 0.0 | 2.0 | 0.0 | 1.0 | ... | 0.0 | 6 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | 1.0 | ... | 0.0 | 7 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | ... | 2.0 | 8 | 0.0 | 0.0 | 0.0 | 2.0 | 1.0 | 0.0 | ... | 1.0 | 9 | 1.0 | 0.0 | 1.0 | 3.0 | 1.0 | 0.0 | ... | 0.0 | 10 | 4.0 | 0.0 | 1.0 | 3.0 | 0.0 | 0.0 | ... | 1.0 | ... 31 | 0.0 | 0.0 | 0.0 | 4.0 | 0.0 | 8.0 | ... | 0.0 | Total |20.0 |12.0 |10.0 |11.0 |10.0 |30.0 | ... |10.0 | Max |7.0 |5.0 |4.0 |5.0 |6.0 |11.0 | ... |4.0 | Mean |0.64 |0.42 |0.33 |0.35 |0.33 |1.0 | ... |0.32 |

代码:

while($row = odbc_fetch_array($rs)){
$Station = $row['StationCode'];
$Year = $row['Year'];
$Day = $row['Day'];
$Month = $row['Month'];
$data[$Day][$Month] = $row['D_Rainfall'];
$montharray[] = $row['Month'];
$sumArray =  [];
}
echo '<table class="table-condensed">';
echo '<tr class="text-info"><td><h4>Station Name:</h4>    </td><td>'.$Station.'</td></tr>';
echo '<tr class="text-info"><td><h4>Year:</h4></td><td>'.$Year.'</td></tr>';
echo '</table>';
echo '<div class="table-responsive">
<table class="table table bordered table-condensed">
<thead>         
    <tr>
    <th>Day</th>
 ';
    $montharray = array_unique($montharray);
        foreach($montharray as $name){
             $sumArray[$name] = 0;                   
        echo '<th>' . $name . '</th>';
        }                   
        echo '</tr>';
        echo '</thead>';
        echo '<tbody>';           
        foreach($data as $day=>$rainfall){
            echo '<tr>';
            echo '<th>'. $day .'</th>'; 
                 foreach($montharray as $name){
                   $maxArray[] = isset($rainfall[$name]) ? $rainfall[$name] : 0 ; //for max 
                   $sumArray[$name] += isset($rainfall[$name]) ? $rainfall[$name] : 0; //for sum
                   $D_rainfall = isset($rainfall[$name]) ? $rainfall[$name] : '-';
                   echo '<td>' . $D_rainfall . '</td>';
                    }
            echo '</tr>';
            }   
        echo '<tr>';
        echo '<th>Total</th>';
             foreach($montharray as $name){
                echo '<td>'. $sumArray[$name].'</td>'; // Total Sum per month
                }
        echo '</tr>';   

        echo '<tr>';
        echo '<th>Max</th>';
             foreach($montharray as $name){
                echo '<td>'. max($maxArray) .'</td>'; // Max per month
                }
        echo '</tr>';

        echo '<tr>';
        echo '<th>Mean</th>';
             foreach($montharray as $name){
                echo '<td> total / days in month ??</td>'; // Mean per month
                }
        echo '</tr>';
        echo '</tbody>';
    echo '</table>';`  

查询:
"SELECT StationCode, Year, Month, Day, D_Rainfall FROM Rainfall WHERE StationCode = 1 ORDER BY Year ASC ,Month ASC ,Day ASC"

0 个答案:

没有答案