在逗号分隔的csv文件中,我只想计算第一个数字相同的行数。
以下是示例数据,我想获得以2(2行)开头的行数,以及以4(3行)开头的行。这只是一个例子,数字是随机的。:
2,0,0
2,1,0
4,0,0
4,3,0
4,4,0
我正在尝试使用代码,我只能计算文件的所有行,但不知道如何只计算具有相同第一个数字的行。
$i = 0;
while ($i < 5) { //fixed number of times
$i++;
$rows = 0;
$fp = fopen("test.csv", "r");
while (fgetcsv($fp)) { //don't want all rows
$rows++;
}
fclose($fp);
echo $rows;
}
修改 对不起,我忘了提及上面文件中的数字是随机的,它们并不总是2或4。
答案 0 :(得分:2)
您需要一个数组来获取统计信息。
$i = 0;
$agg = []; // to count stats
while ($i < 5) {
$i++;
$rows = 0;
$fp = fopen("test.csv", "r");
while ($line = fgetcsv($fp)) {
$number = $line[0]; // get first number
if(isset($agg[$number])){ // if there is the number in stats
$agg[$number]++; // count new one
} else {
$agg[$number] = 1; // mark as found one
}
}
fclose($fp);
print_r($agg);
}
答案 1 :(得分:1)
你可能会尝试这样的事情:
$i = 0;
while ($i < 5) { //fixed number of times
$i++;
$rows = array();
$fp = fopen("test.csv", "r");
while ($data = fgetcsv($fp)) {
$first = $data[0];
if(isset($rows[$first]) {
$rows[$first] += 1;
} else {
$rows[$first] = 1;
}
}
fclose($fp);
print_r($rows);
}
我没有测试我的代码,因此可能包含错误。
执行后,$rows
将包含一个形式为'first number' => 'count'
但是我不明白为什么你这样做了五次,为什么你没有使用for
循环而不是while
?
答案 2 :(得分:0)
假设你知道如何获取文本文件的内容,这样的东西应该有用:
$ar = explode("\n",$txtfileContents);
$counts = array();
foreach($ar as $row){
$counts[$row[0]]++;
}
$counts
现在包含所有第一个字符的数组以及它们出现的次数。您现在可以像这样简单地访问它们:
echo "'2' appeared ".$count['2']." times<br/>";
echo "'4' appeared ".$count['4']." times";
一步一步:
将文本文件拆分为各行的数组:
$ar = explode("\n",$txtfileContents);
(在这里尝试file(),这可能比爆炸更可靠)
循环通过它:
foreach($ar as $row){
}
然后检查循环中的第一个字符并分别计算每个字符:
$counts[$row[0]]++;