Dafür würde ich folgendes machen:
1:
Die Spalten einer Zeile werden nur durchlaufen wenn mindestens der erste Wert ungleich 0 ist:
PHP-Code:
/*
* 2-Dimensionales Array ablaufen und Zeiten aufsummieren
* ACHTUNG: i-Schleife beginnt mit 1 um die Kopfzeile der CSV-Datei zu überspringen
*/
$sums = array();
$count = 0;
for($i=1; $i<count($lines); $i++) {
if(!empty($lines[$i][0])) {
$count++;
for($j=0; $j<count($lines[$i]); $j++) {
// Falls es der erste Durchlauf ist, wird die Summe mit 0 vorbelegt
if(!isset($sums[$j]))
$sums[$j] = 0;
// Wert nach Minuten und Sekunden auftrennen und als Sekundenwert ablegen
$time = preg_split('/:/', $lines[$i][$j]);
$seconds = $time[0] * 60 + $time[1];
$sums[$j] += $seconds;
}
}
}
2:
Bei der Bildung des Durchschnitts kann jetzt nicht mehr einfach $lines - 1 als Anzahl genommen werden, stattdessen wird nun der vorher ermittelte Wert $count genommen:
PHP-Code:
/*
* Durchschnitt der einzelnen Spalten bilden
*/
$averages = array();
for($i=0; $i<count($sums); $i++) {
// Summe aus dem Array holen und durch Anzahl der Zeilen (in $count ermittelt) teilen
// --> ergibt den Durchschnittswert in Sekunden
$seconds = $sums[$i] / $count;
// 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;
}
Hoffe, dass es dich weiterbringt!