如何使用PHP获取CSV文件中的总行数?

时间:2014-01-30 03:35:46

标签: php csv row totals

如何使用PHP获取CSV文件中的总行数?我正在使用这种方法,但可以让它正常工作。

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

  echo $row;
}

11 个答案:

答案 0 :(得分:52)

这是使用file()将整个文件读入数组,自动解析新行等的另一个选项:

$fp = file('test.csv');
echo count($fp);

此外,自PHP5起,您可以传递FILE_SKIP_EMPTY_LINES ...以跳过空行,如果您想:

$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);

手动: http://php.net/manual/en/function.file.php

答案 1 :(得分:41)

使用SplFileObject创建新的文件引用:

$file = new SplFileObject('test.csv', 'r');

尝试seek到最高的PHP,PHP可以处理:

$file->seek(PHP_INT_MAX);

然后实际上它将寻找文件中可能的最高行,有最后一行,最后一行+ 1等于你的总行数:

echo $file->key() + 1;

Tricky,但这样可以避免将文件内容加载到内存中,这在处理非常大的文件时非常酷。

答案 2 :(得分:13)

尝试

$c =0;
$fp = fopen("test.csv","r");
if($fp){
    while(!feof($fp)){
          $content = fgets($fp);
      if($content)    $c++;
    }
}
fclose($fp);
echo $c;

答案 3 :(得分:5)

我知道这已经很老了,但实际上我遇到了同样的问题。 作为一种解决方案,我假设使用linux特定的逻辑:

$rows = shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');

注意:这仅适用于Linux,如果您100%确定您的文件没有多行单元格,则应该使用此选项

答案 4 :(得分:4)

CSV行由换行符分隔。因此,按换行符拆分行,您将得到一个可以计数的行数组。

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
    $rows = explode("\n", $fp);
    $length = count($rows);

    echo $length;
}

答案 5 :(得分:0)

我知道这是一篇旧帖子,但我一直在搜索这个问题,并发现原始代码的唯一问题是你需要在while循环之外定义$row ,像这样:

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
$row = 1;
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

以防它有助于某人:)   echo $ row; }

答案 6 :(得分:0)

注意;没有更高的评价方法可以对文件中的行进行计数,因为它们仅对行进行计数,而不对csv条目(可以包含换行符)进行计数,因此这些解决方案都不可靠

我在op上使用了类似的解决方案,并且效果很好,但是使用op的代码,while部分可能会空行中断,这可能是他的问题。

所以看起来像这样(编辑后的操作码)

$rowCount=0;
if (($fp = fopen("test.csv", "r")) !== FALSE) {
  while(!feof($fp)) {
    $data = fgetcsv($fp , 0 , ',' , '"', '"' );
    if(empty($data)) continue; //empty row
    $rowCount++;
  }
  fclose($fp);
}
echo $rowCount;

答案 7 :(得分:0)

我觉得这是最可靠的:

$file = new SplFileObject('file.csv', 'r');
$file->setFlags(
    SplFileObject::READ_CSV |
    SplFileObject::READ_AHEAD |
    SplFileObject::SKIP_EMPTY |
    SplFileObject::DROP_NEW_LINE
);

$file->seek(PHP_INT_MAX);

$lineCount = $file->key() + 1;

答案 8 :(得分:-1)

如果您从表单

获取文件
$file = $_FILES['csv']['tmp_name'];
                $fp = new SplFileObject($file, 'r');
                $fp->seek(PHP_INT_MAX);
                echo $fp->key() + 1;
                $fp->rewind();

像魅力一样!!!!!!!!!!!!!!!!!!

答案 9 :(得分:-1)

{{1}}

答案 10 :(得分:-2)

count(文件(' filename.csv',FILE_SKIP_EMPTY_LINES));