1

特定の「列」に単語が表示される回数を読み取り、カウントしたい、絶えず変化する CSV ファイルのディレクトリがあります。次のコードを使用して、単一のファイルで正常に実行しています。

$file = 'Some\Random\Directory\myfile.txt');

$fh = fopen($file, 'rb');

$tag = array();

while($col = fgetcsv($fh)) {
    if (isset($tag[$col[2]])) {
       $tag[$col[2]]++;
    } else {
       $tag[$col[2]] = 1;
    }
}
fclose($fh);

$foo = ($tag['foo']);
$bar = ($tag['bar']);
echo $foo;

しかし、次のコードでディレクトリ全体を解析しようとすると、ハングアップしました。

$files = glob('Some\Random\Directory\*.txt');
foreach($files as $file){
    $fh = fopen($file, 'rb');

    $tag = array();

    while($col = fgetcsv($fh)) {

        if (isset($tag[$col[2]])) {
            $tag[$col[2]]++;
        } else {
            $tag[$col[2]] = 1;
        }
    }
    fclose($fh);

    $foo = ($tag['foo']);
    $bar = ($tag['bar']);
    $foo_sum = array_sum($foo);    
}
echo $foo_sum;

このコードにより、ページには何も表示されません。array_sum()関数を削除しechoてループ内に配置すると、すべてのインスタンスfooが表示されますが、ファイルごとに 1 つの数値として表示されます。fooすべてのs の合計を取得できない原因は何ですか?

4

2 に答える 2

1

ループするたびに配列をリセットします。ループの前に引っ張って後で評価する

$tag = array();
$files = ...;
foreach (...) {
...
}

$foo = ($tag['foo']);
$bar = ($tag['bar']);
$foo_sum = array_sum($foo);    
echo $foo_sum;

sのカウントだけが必要な場合はfoo、次のこともできます。

echo $tag['foo'];

array_sum()は 1 つしかないため、必要ありません$tag['foo']

于 2012-12-31T18:19:40.093 に答える
0

試してみてください$foo_sum += array_sum($foo);。ループするたびに値を上書きしています。

于 2012-12-31T18:25:11.413 に答える