13

私が行ったこのスクリプトがあります。基本的に、「ログ」フォルダー内のすべてのファイルを取得し、それらをすべて 1 つの配列ファイルにマージします。唯一の問題は、空白行または空の行があるとスクリプトが壊れることがあることです! 空白の空行を自動的にスキップして次に進むようにするにはどうすればよいですか? 空白行は必ずしも上または下にあるとは限りません! csvファイルの途中にある可能性があります

<?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 ));
?>
4

3 に答える 3

21

のドキュメントでfgetcsv()読むことができるように:

CSV ファイル内の空白行は、単一の null フィールドで構成される配列として返され、エラーとして扱われません。

データ配列に追加する前にそれを確認するだけで十分です。

while (($result = fgetcsv($in)) !== false) {
    if (array(null) !== $result) { // ignore blank lines
        $csv[] = $result;
    }
}
于 2013-08-19T23:06:25.123 に答える
2

要するに

$csv = array_map('str_getcsv', file($file_path, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES));

説明

  1. fileファイルの内容を配列に読み込みます。はFILE_SKIP_EMPTY_LINES、ファイル内の空行をスキップします。
  2. array_mapstr_getcsv配列の各要素に関数を適用します。str_getcsvformatのフィールドの文字列入力を解析し、 csvフィールドを含む配列を返します。

str_getcsvの詳細を読む

ファイルについてもっと読む

array_mapの詳細を読む

于 2018-10-16T12:43:39.960 に答える