Skip to content

Instantly share code, notes, and snippets.

@dev-ext
Forked from robflaherty/csv-to-json.php
Created August 1, 2014 09:04

Revisions

  1. @robflaherty robflaherty created this gist Sep 1, 2011.
    61 changes: 61 additions & 0 deletions csv-to-json.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    <?php
    /*
    * Converts CSV to JSON
    * Example uses Google Spreadsheet CSV feed
    * csvToArray function I think I found on php.net
    */

    header('Content-type: application/json');

    // Set your CSV feed
    $feed = 'https://docs.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0Akse3y5kCOR8dEh6cWRYWDVlWmN0TEdfRkZ3dkkzdGc&single=true&gid=0&output=csv';

    // Arrays we'll use later
    $keys = array();
    $newArray = array();

    // Function to convert CSV into associative array
    function csvToArray($file, $delimiter) {
    if (($handle = fopen($file, 'r')) !== FALSE) {
    $i = 0;
    while (($lineArray = fgetcsv($handle, 4000, $delimiter, '"')) !== FALSE) {
    for ($j = 0; $j < count($lineArray); $j++) {
    $arr[$i][$j] = $lineArray[$j];
    }
    $i++;
    }
    fclose($handle);
    }
    return $arr;
    }

    // Do it
    $data = csvToArray($feed, ',');

    // Set number of elements (minus 1 because we shift off the first row)
    $count = count($data) - 1;

    //Use first row for names
    $labels = array_shift($data);

    foreach ($labels as $label) {
    $keys[] = $label;
    }

    // Add Ids, just in case we want them later
    $keys[] = 'id';

    for ($i = 0; $i < $count; $i++) {
    $data[$i][] = $i;
    }

    // Bring it all together
    for ($j = 0; $j < $count; $j++) {
    $d = array_combine($keys, $data[$j]);
    $newArray[$j] = $d;
    }

    // Print it out as JSON
    echo json_encode($newArray);

    ?>