web-dev-qa-db-ja.com

PHPでCSVファイルの行の総数を取得するにはどうすればよいですか?

PHPを使用してCSVファイルにある行の総数を取得するにはどうすればよいですか?私はこの方法を使用していますが、適切に機能させることができます。

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

  echo $row;
}
25
telexper

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

54
Robbie Averill

SplFileObjectを使用して新しいファイル参照を作成します。

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

seekを最高のInt PHPで処理できるようにしよう:

$file->seek(PHP_INT_MAX);

次に、実際にファイル内で最高の行を探します。最後の行があり、最後の行+ 1は合計行に等しくなります。

echo $file->key() + 1;

トリッキーですが、これにより、ファイルの内容をメモリにロードすることを回避できます。これは、非常に大きなファイルを処理する場合に実行する非常にクールなことです。

42
Leo Cavalcante

試して

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

これはかなり古いことを知っていますが、実際には同じ質問にぶつかりました。解決策として、Linux固有のロジックを使用すると仮定します。

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

注:これはLinuxでのみ機能します。ファイルに複数行セルがないことを100%確信している場合にのみ使用してください

5
boesing

CSV行は改行で区切られます。したがって、行を改行で分割すると、カウント可能な行の配列が得られます。

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

    echo $length;
}
4
Josh S.
$filename=$_FILES['sel_file']['tmp_name'];
$file=fopen($filename,"r");
$RowCount=0;

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

echo $RowCount;
fclose($file);
0

私はこれが古い投稿であることを知っていますが、この問題をグーグルで調べており、元のコードの唯一の問題はwhileループの外側で$rowを定義する必要がある、このような:

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

念のために:) echo $ row; }

0
Rosamunda