我有一个不断变化的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的总和?
答案 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);
。每次循环时都会覆盖该值。