Skip to content
Advertisement

CSV parsing with str_getcsv fails on new line

While reading a csv file with PHP a problem occured with a line break within the CSV file. The contents of one cell will be split once a comma is followed by a line break:

$csv = array_map('str_getcsv', file($file));

first,second,"third,
    more,text","forth"
next,dataset

This will result in:

1) first | second | third
2) more text | forth
3) next | dataset

While it should result in:

1) first | second | third more text | forth
2) next | dataset

Is this a bug within str_getcsv?

Advertisement

Answer

Don’t do that, use fgetcsv(). You’re having problems because file() doesn’t care about the string encapsulation in your file.

$fh = fopen('file.csv', 'r');

while( $line = fgetcsv($fh) ) {
    // do a thing
}

fclose($fh);

https://secure.php.net/manual/en/function.fgetcsv.php

And try not to store all the lines into an array before performing your operations if you can help it. Your system’s memory usage will thank you.

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement