17 Mar 2020

Parsing CSV in PHP, the easiest way

I discourage using composer libraries for very simple problems that can be solved with pure PHP.

For example, a few days ago I came across these lines of code:

$csv = Reader::createFromPath(storage_path('dummy.csv'), 'r');
$csv->setHeaderOffset(0);

$records = $csv->getRecords();

foreach ($records as $record) {
    echo $record['first_name'];
}

As you may see here, this code extracts the first_name from the given CSV file.

To make this code work, you do need the league/csv composer package.

The league/csv is one of the best CSV packages for PHP, it provides some convenient methods to work with CSV, but it’s not solving a big problem here, actually, it adds more complexity into our project.

If somebody got a simple problem, something like iterating over a CSV file, why don’t she use the PHP’s built-in CSV functions?

Let’s see how can we convert the previous code to pure PHP code:

$csv = new SplFileObject(storage_path('dummy.csv'));
$csv->setFlags(SplFileObject::READ_CSV);
foreach ($csv as $item) {
    echo $item['first_name'];
}

It’s simpler, cleaner and without any extra packages.

You may use the setCsvControl method to specify more things such as the delimiter.