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则会显示 的所有实例,但每个文件一个数字。是什么让我无法获得所有foos 的总和?

4

2 回答 2

1

每次循环时都会重置数组。在你的循环之前拉它并在之后评估它

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

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

如果你只需要foos的计数,你也可以这样做

echo $tag['foo'];

不需要array_sum(),因为只有一个$tag['foo']

于 2012-12-31T18:19:40.093 回答
0

试试$foo_sum += array_sum($foo);。每次循环时都会覆盖该值。

于 2012-12-31T18:25:11.413 回答