计算具有相同第一个字符的文件的行

时间:2014-08-25 10:42:20

标签: php

在逗号分隔的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。

3 个答案:

答案 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]]++;