PHP CSV string to array PHP CSV string to array php php

PHP CSV string to array


Do this:

$csvData = file_get_contents($fileName);$lines = explode(PHP_EOL, $csvData);$array = array();foreach ($lines as $line) {    $array[] = str_getcsv($line);}print_r($array);

It will give you an output like this:

Array(    [0] => Array        (            [0] => 12345            [1] => Computers            [2] => Acer            [3] => 4            [4] => Varta            [5] => 5.93            [6] => 1            [7] => 0.04            [8] => 27-05-2013        )    [1] => Array        (            [0] => 12346            [1] => Computers            [2] => Acer            [3] => 5            [4] => Decra            [5] => 5.94            [6] => 1            [7] => 0.04            [8] => 27-05-2013        ))

I hope this can be of some help.


You should use fgetcsv. Since you cannot import a file as a stream because the csv is a variable, then you should spoof the string as a file by using php://temp or php://memory first:

$fp = fopen("php://temp", 'r+');fputs($fp, $csvText);rewind($fp);

Then you will have no problem using fgetcsv:

$csv = [];while ( ($data = fgetcsv($fp) ) !== FALSE ) {    $csv[] = $data;}

$data will be an array of a single csv line (which may include line breaks or commas, etc), as it should be.

Caveat: The memory limit of php://temp can be controlled by appending /maxmemory:NN, where NN is the maximum amount of data to keep in memory before using a temporary file, in bytes. (the default is 2 MB) http://www.php.net/manual/en/wrappers.php.php


Handy oneliner:

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