如何使用PHP计算多个CSV文件中的值的实例?

时间:2012-12-31 18:14:35

标签: php csv

我有一个不断变化的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的所有实例,但每个文件只显示一个数字。是什么让我无法获得所有foo s的总和?

2 个答案:

答案 0 :(得分:1)

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

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

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

如果您只需要foo的计数,您也可以

echo $tag['foo'];

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

答案 1 :(得分:0)

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