Как получить общее количество строк в CSV файле с помощью PHP?

Как получить общее количество строк в файле CSV с помощью PHP? Я использую этот метод, но могу заставить его работать правильно.

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

  echo $row;
}

Ответы

Ответ 1

Вот еще один вариант с помощью 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

Ответ 2

Try

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

Ответ 3

Создайте новую ссылку на файл с помощью SplFileObject:

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

Попробуйте seek до наивысшего значения Int PHP:

$file->seek(PHP_INT_MAX);

Тогда на самом деле он будет искать самую высокую строку в файле, есть последняя строка, а последняя строка + 1 равна вашим общим строкам:

echo $file->key() + 1;

Трюк, но это не позволит вам загружать содержимое файла в память, что очень приятно делать при работе с действительно большими файлами.

Ответ 4

Я знаю, что это довольно старый, но на самом деле я столкнулся с тем же вопросом. В качестве решения я бы предположил использовать конкретную логику Linux:

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

ПРИМЕЧАНИЕ: это работает только для Linux, и это нужно использовать, только если вы на 100% уверены, что в вашем файле нет многострочных ячеек

Ответ 5

Строки CSV разделяются разрывами строк. Поэтому разделите строки на разрывы строк, и вы получите массив строк, который является счетным.

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

    echo $length;
}

Ответ 6

Я знаю, что это старый пост, но я искал эту проблему и обнаружил, что единственная проблема с исходным кодом заключалась в том, что вам нужно определить $row вне цикла while, вот так:

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

На всякий случай это помогает кому-то:) echo $row; }

Ответ 7

$filename=$_FILES['sel_file']['tmp_name'];
$file=fopen($filename,"r");
$RowCount=0;

while ((fgetcsv($file)) !== FALSE) 
{
    $RowCount++;
}

echo $RowCount;
fclose($file);

Ответ 8

count (файл ('filename.csv', FILE_SKIP_EMPTY_LINES));

Ответ 9

Если вы получаете файл из формы

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

Работает как шарм!!!!!!!!!!!!!!!!!!