2013-08-19 199 views
6

私はこのスクリプトを持っています。基本的には、 "logs"フォルダ内のすべてのファイルを取り込み、それらをすべて1つの配列ファイルにマージします。空行または空行です。空の空白行を自動的にスキップして次へ進む方法を教えてください。空白行は必ずしも上部または下部にあるわけではありません! csvファイルの途中で可能性がありfgetcsvファイル内の空白行をスキップ

<?php 
    $csv = array(); 
    $files = glob('../logs/*.*'); 
    $out = fopen("newfile.txt", "w"); 

    foreach($files as $file){ 
     $in = fopen($file, "r"); 

    while (($result = fgetcsv($in)) !== false) 

     { 
      $csv[] = $result; 
     } 

     fclose($in); 
     fclose($out); 
    } 

    print json_encode(array('aaData' => $csv)); 
?> 
+0

おそらく 'if(is_array($ results)&& count($ result)){$ csv [] = $ result; } ' – Orangepill

+2

@Orangepill:' fgetcsv() 'は行が空白のときに' array(null) 'を返します。残念なことに' is_array($ result)&& count($ result) 'は' true'です。 'if($ result!== array(null)){$ csv [] = $ result; } 'はトリックを行う必要があります。素晴らしい仕事 –

+0

@TomasCreemers:あなたは – hyperexpert

答えて

13

あなたが読むことができたようdocumentation for fgetcsv()

CSVファイル内の空白行は、単一のヌルフィールドを含むアレイとして返され、エラーとして扱われません。

十分なものでなければならない、あなたのデータ配列に追加する前に、そのためのチェック:これは動作します

while (($result = fgetcsv($in)) !== false) { 
    if (array(null) !== $result) { // ignore blank lines 
     $csv[] = $result; 
    } 
} 
+0

ありがとうの答えとして、それを投稿してくださいだろうDは、このソリューションは、「このように、何の値を含まない「空」のcsvラインのケースをキャッチしません – hyperexpert

+0

素晴らしい仕事,,,,,, ,,」あなたは正しいです@Pitt空の文字列の配列が – Pitt

+0

値として翻訳されるであろう。私はこのソリューションを使用しようとしていましたが、テストしてもうまくいきませんでした。 https://stackoverflow.com/questions/5040811/checking-if-all-the-array-items-are-empty-php:その場合は、あなたはこの質問から受け入れ答えを使用することができます –

3

100%テストされ、最も簡単な方法。空白行は、fgetcsvがヌル要素だけを含む空でない配列を返すようになっているという説明です。

if ($result[0] == NULL) 
    continue; 
関連する問題