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() 来避免处理一些行尾的 futz。

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 上...

注意:如果 PHP 在读取 Macintosh 计算机上或由 Macintosh 计算机创建的文件时无法正确识别行尾,启用 auto_detect_line_endings 运行时配置选项可能有助于解决问题。

于 2013-01-31T16:24:16.673 回答