我正在使用代码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);
答案 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运行时配置选项可能有助于解决问题。