1

次の形式のファイルがあります

1    52
2    456
3    4516
5    4545
6     41

ファイルを読み取り、PHPの2番目の列のmin / max / avg値を取得するための最速の方法は何でしょうか?

4

2 に答える 2

1

次のようなものです。ここ<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

于 2012-04-25T22:29:30.227 に答える
1

@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
}
于 2012-04-26T04:37:52.083 に答える