Habs ein bisschen umgebaut:
PHP-Code:
<?php
// CSV-Datei öffnen
$fh = fopen('aht.csv', 'r');
$lines = array();
// Zeilenweise einlesen (fgetcsv für gleichzeitiges Lesen und "Splitten")
while(($line = fgetcsv($fh, 0, ';')) !== false) {
$lines[] = $line;
}
// Datei schließen
fclose($fh);
//festlegen, welches die Start- und Ende-Spalten sind, dabei hat die erste Spalte den Index 0
$startspalte = 3;
$endespalte = 7;
/*
* 2-Dimensionales Array ablaufen und alle nichtleeren Zeiten in neues Array kopieren
* ACHTUNG: i-Schleife beginnt mit 1 um die Kopfzeile der CSV-Datei zu überspringen
*/
$tinseconds = array();
$count = 0;
for($i=1; $i<count($lines); $i++) {
for($j=$startspalte; $j<$endespalte; $j++) {
if (!empty($lines[$i][$j])) {
// Wert nach Minuten und Sekunden auftrennen und als Sekundenwert ablegen
$time = preg_split('/:/', $lines[$i][$j]);
$seconds = $time[0] * 60 + $time[1];
$tinseconds[$j][] = $seconds;
}
}
}
/* $tinseconds sieht in etwa so aus:
* $tinseconds[3] alle Werte aus Spalte 3
* $tinseconds[4] alle Werte aus Spalte 4; die Anzahl muss nicht mit $tinseconds[3] übereinstimmen
* ...
*/
/*
/*
* Durchschnitt der einzelnen Spalten bilden
*/
$averages = array();
for($i=$startspalte; $i<$endespalte; $i++) {
// Über die einzelnen Spalten Summe bilden und durch Anzahl der Einträge teilen
// --> ergibt den Durchschnittswert in Sekunden
if (count($tinseconds[$i])>0) {
$seconds = array_sum($tinseconds[$i]) / count($tinseconds[$i]);
// Volle Minuten bestimmen, eventuell mit führender 0
$avg_minutes = str_pad(floor($seconds / 60), 2, '0', STR_PAD_LEFT);
$avg_seconds = str_pad(($seconds % 60), 2, '0', STR_PAD_LEFT);
$averages[] = $avg_minutes . ':' . $avg_seconds;
}
}
// Testweise ausgeben lassen :)
print_r($averages);
Bei T1 komm ich auf Deine Zeit. Rest hab ich nicht nachgerechnet. Das funktioniert jetzt auch, wenn einzelne Werte in T1, T2, T3 oder TGes nicht gesetzt sind.