Einzelnen Beitrag anzeigen
Ungelesen 19.03.12, 19:46   #18
smdata2
Anfänger
 
Registriert seit: Apr 2009
Beiträge: 24
Bedankt: 5
smdata2 ist noch neu hier! | 0 Respekt Punkte
Standard

Soo meiner Meinung nach funktioniert es, es kommen jedenfalls die gleichen Werte wie mit der MITTELWERT()-Funktion von Excel raus
Sag einfach Bescheid!

Edit: Die Änderungen sind eigentlich, dass nun nicht das erste Feld der Spalte, sondern das Feld mit dem Index $startspalte geprüft wird, sowie die Anweisung array_values nach der Summation, um unabhängig von den Spaltenindizes die Summen einfacher durchlaufen zu können.

PHP-Code:
<?php 
// CSV-Datei öffnen 
$fh fopen('bsp3.csv''r'); 
$lines = array(); 
// Zeilenweise einlesen (fgetcsv für gleichzeitiges Lesen und "Splitten") 
while(($line fgetcsv($fh0';')) !== false) { 
  
$lines[] = $line

// Datei schließen 
fclose($fh); 

/* 
 * 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++) {     
  
// Festlegen, welches die Start- und Ende-Spalten sind, dabei hat die erste Spalte den Index 0 
  
$startspalte 3
  
$endespalte 7;
  if(!empty(
$lines[$i][$startspalte])) { 
    
$count++; 
  for(
$j=$startspalte$j<$endespalte$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
  } 
 }    
}
// Durch array_values werden die Indizes des Arrays umgewandelt, um den Durchschnitt einfacher
// berechnen zu können (siehe http://php.net/manual/de/function.array-values.php)
$sums array_values($sums);
 
/* 
/* 
 * 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;  
}   

// Testweise ausgeben lassen :) 
print_r($averages);
smdata2 ist offline   Mit Zitat antworten