4

以下のコードを使用して、csv ファイルを配列に変換しています。しかし、問題は行の終わりがCR LFであり、それが検出されないため、配列のオフセットが間違っていることです。CR LF は無視され、その周囲の「セル」がマージされます。

この行末を検出して配列を正しく分割するようにコードを書き直すにはどうすればよいですか? または、csv を配列に変換するためのより良い方法はありますか?

ここにはいくつかの同様の質問がありますが、この問題の解決策はまだ見つかりません。

ありがとう。

$fileName ='test.csv';   
$csvData = file_get_contents($fileName); 
$csvNumColumns = 11; 
$csvDelim = ";"; 
$data = array_chunk(str_getcsv($csvData, $csvDelim), $csvNumColumns); 

print_r($data);
4

2 に答える 2

3

使ってみましたfgetcsv()か?php.netの完全な情報。

php.netからの使用例

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>
于 2013-01-31T16:26:50.500 に答える
2

str_getcsv() を避け、fgetcsv() を使用して、行末のフッツの一部を処理しないようにします。

http://php.net/manual/en/function.fgetcsv.php

if (($handle = fopen("fileName", "r")) !== FALSE) {
    while (($data = fgetcsv($handle)) !== FALSE) {
      var_dump($data);  //array representation of one line of csv...
    }
}
fclose($handle);

Mac を使用している場合は...

注: Macintosh コンピューター上または Macintosh コンピューターで作成されたファイルを読み取るときに、PHP が行末を正しく認識しない場合は、auto_detect_line_endings 実行時構成オプションを有効にすると、問題を解決できる場合があります。

于 2013-01-31T16:24:16.673 に答える