2017-02-14 2 views
1

csvファイルがアップロードされ、データがそこから抽出され、データベースにアップロードされるコードがあります。すべて正常に動作しますが、空の行をスキップして読み込みを続けることができますその中にデータがある行。 csvを読む際に空行をスキップする

この

は私が

if (($source = fopen($csv_file, "r")) !== FALSE) 
{ 
//read data from excel 
while (($data = fgetcsv($source, 1000, ",")) !== FALSE) 
{ 
    $question=$data[0]; 
    $point=$data[1]; 
    $header=$data[2]; 
    $footer=$data[3]; 
    $type_value=$data[4]; 
    $group_name=$data[5]; 
     echo $question; 

}// while end 

} 
+0

'if(empty($ data [0])){continue; } 'while'ループの始めに、このようなものがありますか? –

答えて

0

if ($data === null) continue; 

私はそれをテストしていないと、それを試してみてくださいcsvファイルからデータを抽出するコードですが、私はそれが動作するはずsthink。

0

あなたの代わりに、基本的なfgetcsv()関数のPHPのSplFileObjectを使用している場合は、それが組み込まれているオプションの空行をスキップするために、この

if (($source = fopen($csv_file, "r")) !== FALSE) 
{ 
// read data from excel 
    while (($data = fgetcsv($source, 1000, ",")) !== FALSE) 
    { 
     if ((string) $data[0] != '0' and empty($data[0])) 
     { 
      continue; 
     } 

     $question = $data[0]; 
     $point  = $data[1]; 
     $header  = $data[2]; 
     $footer  = $data[3]; 
     $type_value = $data[4]; 
     $group_name = $data[5]; 

     echo $question; 
    } 
} 
+0

多くの列があるので、大きな条件セットが必要でしょうか? – coder

+0

私は条件を最小限に抑えました。理由は空()関数が0を空の値として扱うので、条件に$ data [0]!= '0'を入れる理由です。 –

1

をお試しください:

$file = new SplFileObject($csv_file); 
$file->setFlags(SplFileObject::READ_CSV SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); 
foreach ($file as $data) { 
    ... 
} 
+1

Thats nice ..私はそれを試してみてください – coder

1
if ($data[0] == NULL) 
     continue; 

をこれは、なぜなら、fgetcsvはnull要素を内部に持つ空でない配列を返すからです。

関連する問題