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

Php 计算具有相同第一个字符的文件行数,php,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 =

在逗号分隔的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;
}
$i=0;
而($i<5){//固定次数
$i++;
$rows=0;
$fp=fopen(“test.csv”、“r”);
而(fgetcsv($fp)){//不需要所有行
$rows++;
}
fclose($fp);
echo$行;
}
编辑:
对不起,我忘了提到上面文件中的数字是随机的,它们并不总是2或4。

假设您知道如何获取文本文件的内容,类似这样的方法应该可以工作:

$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";
(或者在此处尝试,这可能比爆炸更可靠)

循环通过它:

foreach($ar as $row){

}
然后检查循环中的第一个字符,并分别计数每个字符:

$counts[$row[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";
(或者在此处尝试,这可能比爆炸更可靠)

循环通过它:

foreach($ar as $row){

}
然后检查循环中的第一个字符,并分别计数每个字符:

$counts[$row[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";
(或者在此处尝试,这可能比爆炸更可靠)

循环通过它:

foreach($ar as $row){

}
然后检查循环中的第一个字符,并分别计数每个字符:

$counts[$row[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";
(或者在此处尝试,这可能比爆炸更可靠)

循环通过它:

foreach($ar as $row){

}
然后检查循环中的第一个字符,并分别计数每个字符:

$counts[$row[0]]++;

您可能可以尝试以下方式:

$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);
}
$i=0;
而($i<5){//固定次数
$i++;
$rows=array();
$fp=fopen(“test.csv”、“r”);
而($data=fgetcsv($fp)){
$first=$data[0];
如果(isset($rows[$first]){
$rows[$first]+=1;
}否则{
$rows[$first]=1;
}
}
fclose($fp);
打印(行);
}
我没有测试我的代码,因此它可能包含错误

执行后,
$rows
将包含一个关联数组,其形式为
'first number'=>'count'


然而,我不明白的是,为什么要做五次,为什么不使用
for
循环而不是
while

$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);
}
$i=0;
而($i<5){//固定次数
$i++;
$rows=array();
$fp=fopen(“test.csv”、“r”);
而($data=fgetcsv($fp)){
$first=$data[0];
如果(isset($rows[$first]){
$rows[$first]+=1;
}否则{
$rows[$first]=1;
}
}
fclose($fp);
打印(行);
}
我没有测试我的代码,因此它可能包含错误

执行后,
$rows
将包含一个关联数组,其形式为
'first number'=>'count'


然而,我不明白的是,为什么要做五次,为什么不使用
for
循环而不是
while

$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);
}
$i=0;
而($i<5){//固定次数
$i++;
$rows=array();
$fp=fopen(“test.csv”、“r”);
而($data=fgetcsv($fp)){
$first=$data[0];
如果(isset($rows[$first]){
$rows[$first]+=1;
}否则{
$rows[$first]=1;
}
}
fclose($fp);
打印(行);
}
我没有测试我的代码,因此它可能包含错误

执行后,
$rows
将包含一个关联数组,其形式为
'first number'=>'count'


然而,我不明白的是,为什么要做五次,为什么不使用
for
循环而不是
while

$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);
}
$i=0;
而($i<5){//固定次数
$i++;
$rows=array();
$fp=fopen(“test.csv”、“r”);
而($data=fgetcsv($fp)){
$first=$data[0];
如果(isset($rows[$first]){
$rows[$first]+=1;
}否则{
$rows[$first]=1;
}
}
fclose($fp);
打印(行);
}
我没有测试我的代码,因此它可能包含错误

执行后,
$rows
将包含一个关联数组,其形式为
'first number'=>'count'


但是,我不明白的是,为什么要做五次,为什么不使用
for
循环而不是
while

您需要一个数组来获取统计信息

$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);
}
$i=0;
$agg=[];//统计统计数据
而($i<5){