Basic usage
Once your CSV object is instantiated and configured, you can start interacting with the data using a number of methods available to you.
Iterating over the CSV rows
The CSV object implements PHP’s IteratorAggregate
interface
public AbstractCsv::getIterator(void): Iterator
You can iterate over your CSV object to extract each CSV row using the foreach
construct.
use League\Csv\Reader;
$reader = Reader::createFromPath('/path/to/my/file.csv', 'r');
foreach ($reader as $index => $row) {
//do something meaningful here with $row !!
//$row is an array where each item represent a CSV data cell
//$index is the CSV row index
}
Outputting the CSV
__toString
Returns the string representation of the CSV document
public AbstractCsv::__toString(void): string
Use the echo
construct on the instantiated object or use the __toString
method to show the CSV full content.
Example
use League\Csv\Reader;
$reader = Reader::createFromPath('/path/to/my/file.csv', 'r');
echo $reader;
// or
echo $reader->__toString();
output
If you only wish to make your CSV downloadable by forcing a file download just use the output
method to force the use of the output buffer on the CSV content.
public AbstractCsv::output(string $filename = null): int
- The method returns the number of characters read from the handle and passed through to the output.
- The output method can take an optional argument
$filename
. When present you can even remove more headers.
Example 1 - default usage
use League\Csv\Reader;
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="name-for-your-file.csv"');
$reader = Reader::createFromPath('/path/to/my/file.csv', 'r');
$reader->output();
die;
Example 2 - using the $filename argument
use League\Csv\Reader;
$reader = Reader::createFromPath('/path/to/my/file.csv', 'r');
$reader->output("name-for-your-file.csv");
die;
Example 3 - using a Response object (Symfony, Laravel, PSR-7 etc)
To avoid breaking the flow of your application, you should create a Response object when applicable in your framework. The actual implementation will differ per framework, but you should generally not output headers directly. In some cases you can also use a Streaming Response for larger files.
use League\Csv\Reader;
$reader = Reader::createFromPath('/path/to/my/file.csv', 'r');
return new Response((string) $reader, 200, [
'Content-Type' => 'text/csv; charset=UTF-8',
'Content-Disposition' => 'attachment; filename="name-for-your-file.csv"',
]);
Notes
The output methods can only be affected by:
No other method or property have effect on them.