Michael King
Michael King

Reputation: 415

How can I parse a CSV with php but ignore the commas and double quotes in the strings

I am trying to parse a csv file into an array. Unfortunately one of the columns contains commas and quotes (Example below). Any suggestions how I can avoid breaking up the column in to multiple columns?

I have tried changing the deliminator in the fgetcsv function but that didn't work so I tried using str_replace to escape all the commas but that broke the script.

Example of CSV format

title,->link,->description,->id
Achillea,->http://www.example.com,->another,short example "Of the product",->346346
Seeds,->http://www.example.com,->"please see description for more info, thanks",->34643
Ageratum,->http://www.example.com,->this is, a brief description, of the product.,->213421

    // Open the CSV
    if (($handle = fopen($fileUrl, "r")) !==FALSE) {

        // Set the parent array key to 0
        $key = 0;

        // While there is data available loop through unlimited times (0) using separator (,)
        while (($data = fgetcsv($handle, 0, ",")) !==FALSE) {

           // Count the total keys in each row
           $c = count($data);

           //Populate the array
           for ($x = 0; $x < $c; $x++) {
           $arrCSV[$key][$x] = $data[$x];
           }
           $key++;
        } // end while

        // Close the CSV file
        fclose($handle);
    }

Upvotes: 2

Views: 3165

Answers (1)

SaschaP
SaschaP

Reputation: 889

Maybe you should think about using PHP's file()-function which reads you CSV-file into an array.

Depending on your delimiter you could use explode() then to split the lines into cells.

here an example:

$csv_file("test_file.csv");

foreach($csv_file as $line){
  $cell = explode(",->", $line);  // ==> if ",->" is your csv-delimiter!

  $title[] = $cell[0];
  $link[] = $cell[1];
  $description = $cell[2];
  $id[] = $cell[3];
}

Upvotes: 1

Related Questions