У меня есть файл в формате
1 52 2 456 3 4516 5 4545 6 41
каков был бы самый быстрый способ прочитать в файле и получить значение min / max / avg во втором столбце в PHP?
Что-то вроде следующего, где <filename>
– путь к файлу.
$file = fopen('<filename>', 'r'); $a = 0; $b = 0; $first = true; while (fscanf($file, '%d%d', $a, $b)) { if ($first) { $min = $b; $max = $b; $total = $b; $count = 1; $first = false; } else { $total += $b; if ($b < $min) $min = $b; if ($b > $max) $max = $b; $count++; } } $avg = $total / $count;
Демо: http://ideone.com/rWbqm
Сделал некоторые улучшения производительности из кода @mellamokb:
$file = fopen('<filename>', 'r'); $a = $b = 0; if (fscanf($file, '%d%d', $a, $b)) { $min = $max = $total = $b; $count = 1; while (fscanf($file, '%d%d', $a, $b)) { $total += $b; if ($b < $min) $min = $b; else if ($b > $max) $max = $b; ++$count; } $avg = $total / $count; } else { // Do something here as there is nothing in the file }