У меня есть файл в форматебыстрый способ найти найти мин/макс/Avg значения в файле
1 52
2 456
3 4516
5 4545
6 41
что бы самый быстрый способ чтения в файл и получить мин/макс/Avg значения во втором столбце в PHP?
У меня есть файл в форматебыстрый способ найти найти мин/макс/Avg значения в файле
1 52
2 456
3 4516
5 4545
6 41
что бы самый быстрый способ чтения в файл и получить мин/макс/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
Это дало мне «Время прохода по ссылке было устарело», это нормально, если я удалю &? – user391986
Если я это сделаю, это дает мне «неопределенную переменную a» – user391986
@ user391986: Ах, да, я считаю, что вы можете. Возможно, вам придется задавать значения «$ a» и «$ b» для значений по умолчанию. См. Обновление. Также добавлен пример того, как открыть файл с помощью '' fopen' '(http://php.net/fopen) – mellamokb
Сделаны некоторые улучшения производительности от кода @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
}
Улучшения производительности? Выглядит функционально одинаково, хотя и немного более кратким. Если 'if ($ first)' намного медленнее, чем я думал ;-) – mellamokb
Сохраняет строку 'if $ first' каждую строку после первого. Также пропускает проверку, если он нашел новый минимум. Это зависит от размера файла, который я предполагаю. –
PHP уже есть кое-что для разбора файлов по линии .... это функция называется ... ' file() ' Это говорит о том, что решение @ mellamokb довольно мило, оно решает разбор, а также разбивает файл за пределами PHP-кода, следовательно, он должен быть быстрее, чем просто PHP. – Christian
Каков размер файла? –