$files->getCSV() method

Get next row from a CSV file

This simplifies the reading of a CSV file by abstracting file-open, get-header, get-rows and file-close operations into a single method call, where all those operations are handled internally. All you have to do is keep calling the $files->getCSV($filename) method until it returns false. This method will also skip over blank rows by default, unlike PHP’s fgetcsv() which will return a 1-column row with null value.

This method should always be used in a loop, meaning you must keep calling it until it returns false. Otherwise a CSV file may be unintentionally left open. If you can't do that then use getAllCSV() instead.

For the method $options argument note that the length, separator, enclosure and escape options all correspond to the identically named PHP fgetcsv arguments.

Example foods.csv file (first row is header):

Example of reading the foods.csv file above:

Available since version 3.0.197.

Examples

Food,Type,Color
Apple,Fruit,Red
Banana,Fruit,Yellow
Spinach,Vegetable,Green
while($row = $files->getCSV('/path/to/foods.csv')) {
  echo "Food: $row[Food] ";
  echo "Type: $row[Type] ";
  echo "Color: $row[Color] ";
}

Usage

// basic usage
$array = $files->getCSV(string $filename);

// usage with all arguments
$array = $files->getCSV(string $filename, array $options = []);

Arguments

NameType(s)Description
filenamestring

CSV filename to read from

options (optional)array
  • header (bool|array): Indicate whether CSV has header and how it should be used (default=true): True to treat first line as header and return rows as associative arrays indexed by the header values. False to indicate there is no header and/or to indicate it should return regular non-associative PHP arrays for rows. Array to use it as the header and return rows as associative arrays indexed by your values.
  • length (int): Optional. When specified, must be greater than the longest line (in characters) to be found in the CSV file (allowing for trailing line-end characters). Otherwise the line is split in chunks of length characters, unless the split would occur inside an enclosure. Omitting this parameter (or setting it to 0, or null in PHP 8.0.0 or later) the maximum line length is not limited, which is slightly slower. (default=0)
  • separator (string): The field separator/delimiter, one single-byte character only. (default=',')
  • enclosure (string): The field enclosure character, one single-byte character only. (default='"')
  • escape (string): The escape character, at most one single-byte character. An empty string ("") disables the proprietary escape mechanism. (default="\")
  • blanks (bool): Allow blank rows? (default=false)
  • convert (bool): Convert digit-only strings to integers? (default=false)

Return value

array false

Returns array for next row or boolean false when there are no more rows.


$files methods and properties

API reference based on ProcessWire core version 3.0.214

Twitter updates

  • This week ProcessWire 3.0.214 is on the dev branch. Relative to 3.0.213 this version has 16 new commits which include the addition of 3 new pull requests, 6 issue fixes, a new WireNumberTools utility class, and various other improvements. More
    17 March 2023
  • ProcessWire 3.0.213 core updates: This week we’ll look at the new WireSitemapXML module, a new WireNumberTools core class, and a new ability for Fieldtype modules to specify useful ready-to-use configurations when creating new fields. More
    24 February 2023
  • ProcessWire 3.0.212 core updates— More
    17 February 2023

Latest news

  • ProcessWire Weekly #463
    In the 463rd issue of ProcessWire Weekly brings we'll check out the latest weekly update from Ryan, some weekly forum and online highlights, and more. Read on!
    Weekly.pw / 26 March 2023
  • ProcessWire 3.0.213 core updates
    This week we’ll look at the new WireSitemapXML module, a new WireNumberTools core class, and a new ability for Fieldtype modules to specify useful ready-to-use configurations when creating new fields.
    Blog / 24 February 2023
  • Subscribe to weekly ProcessWire news

“ProcessWire is like a breath of fresh air. So powerful yet simple to build with and customise, and web editors love it too.” —Margaret Chatwin, Web developer