次の形式のファイルがあります
1 52
2 456
3 4516
5 4545
6 41
ファイルを読み取り、PHPの2番目の列のmin / max / avg値を取得するための最速の方法は何でしょうか?
次の形式のファイルがあります
1 52
2 456
3 4516
5 4545
6 41
ファイルを読み取り、PHPの2番目の列のmin / max / avg値を取得するための最速の方法は何でしょうか?
次のようなものです。ここ<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
}