将CSV转换为PHP数组 - 终点问题(CR LF)

时间:2013-01-31 16:21:48

标签: php csv

我正在使用代码bellow将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);

2 个答案:

答案 0 :(得分: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);
}
?>

答案 1 :(得分: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运行时配置选项可能有助于解决问题。