Generate CSV from Array

function generateCsv($data, $delimiter = ',', $enclosure = '"') {
       $handle = fopen('php://temp', 'r+');
       foreach ($data as $line) {
               fputcsv($handle, $line, $delimiter, $enclosure);
       }
       rewind($handle);
       while (!feof($handle)) {
               $contents .= fread($handle, 8192);
       }
       fclose($handle);
       return $contents;
}

Usage

$data = array(
       array(1, 2, 4),
       array('test string', 'test, literal, comma', 'test literal "quotes"'),
);

echo generateCsv($data);
// outputs:
// 1,2,4
// "test string","test, literal, comma","test literal""quote"""

Comments

  1. User Avatar
    timani
    Permalink to comment#

    Ok this is a sweet function!

  2. User Avatar
    Jared Hocutt
    Permalink to comment#

    This is very helpful. I realize that this is an older post, but I wanted to point out that it appears that you haven’t declared the variable $contents prior to appending to it.

  3. User Avatar
    Mike Timmerman

    Awesome, thanks!

  4. User Avatar
    chestozo
    Permalink to comment#

    This is what they have now in php
    http://php.net/manual/en/function.fputcsv.php

  5. User Avatar
    Bill
    Permalink to comment#

    This guy added a nice touch – array keys as header

    write out the headers

    fputcsv($fh, array_keys(current($data)));

    https://coderwall.com/p/zvzwwa/array-to-comma-separated-string-in-php

Submit a Comment

Posting Code

You may write comments in Markdown. This makes code easy to post, as you can write inline code like `<div>this</div>` or multiline blocks of code in triple backtick fences (```) with double new lines before and after.

Code of Conduct

Absolutely anyone is welcome to submit a comment here. But not all comments will be posted. Think of it like writing a letter to the editor. All submitted comments will be read, but not all published. Published comments will be on-topic, helpful, and further the discussion or debate.

Want to tell us something privately?

Feel free to use our contact form. That's a great place to let us know about typos or anything off-topic.

icon-closeicon-emailicon-linkicon-logo-staricon-menuicon-searchicon-staricon-tag