массивы — Создание максимальной и средней строки в матричной таблице Переполнение стека

Мне нужна помощь в создании строки для максимального и среднего значения для столбца (месяца), я попытался создать строку для максимального значения, но он извлекает максимальное значение за весь год для каждого столбца.
Я также хотел бы знать, будет ли подход такой же, если агрегатные функции будут добавлены в виде столбцов, скажем, моя новая матричная таблица будет использовать год для строк и месяц для столбцов?

Ожидаемый результат:
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"

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector