0

私はPHPが初めてで、fscanfを使用してCSVファイルを読み取り、最小値と最大値を決定しようとしています。私の前の質問は、実際にやろうとしていることの概要を示しています。以下のように、fscanf を使用して CSV 列の最大値と最小値を見つけようとしています。

$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;

私のシナリオでは、CSV ファイルを動的に取得します。列数に基づいて上記のコードを使用したい。たとえば、4 つの列がある場合、前のコードを次のように使用する必要があります。

while (fscanf($file, '%d%d%d%d', $a, $b, $c, $d)) {

CSV ファイルの 4 つの列すべての最大値と最小値を決定します。3列しかない場合は、コードを次のように使用する必要があります。

while (fscanf($file, '%d%d%d', $a, $b, $c)) {

CSV ファイルの 3 つの列すべての最大値と最小値を決定します。PHPでこれを行う方法はありますか? 誰かが私を正しい方向に導いてください。

4

1 に答える 1

0

に 2 つのパラメーターのみを渡すfscanfと、解析された値が配列として返されるため、次のようなことができるはずです。

$colCount = getColumnCount ($file);  //left as an exercise
$pattern = str_repeat ('%d', $colCount);
while ($values = fscanf ($file, $pattern)) {
  ...
}

説明どおりに作成しました$patternが、それをCSVファイルの形式に合わせる必要がある場合があります。たとえば、ファイルがコンマ区切り文字を使用している場合、str_repeat("%d,", $colCount)代わりにパターンを次のようにする必要がある場合があります。

于 2013-10-01T23:06:02.803 に答える