CSV в JSON с помощью PHP?

Мне нужно преобразовать файл CSV в JSON на сервере с использованием PHP. Я использую этот сценарий, который работает:

function csvToJSON($csv) {
    $rows = explode("\n", $csv);

    $i = 0;
    $len = count($rows);
    $json = "{\n" . '    "data" : [';
    foreach ($rows as $row) {
        $cols = explode(',', $row);
        $json .= "\n        {\n";
        $json .= '            "var0" : "' . $cols[0] . "\",\n";
        $json .= '            "var1" : "' . $cols[1] . "\",\n";
        $json .= '            "var2" : "' . $cols[2] . "\",\n";
        $json .= '            "var3" : "' . $cols[3] . "\",\n";
        $json .= '            "var4" : "' . $cols[4] . "\",\n";
        $json .= '            "var5" : "' . $cols[5] . "\",\n";
        $json .= '            "var6" : "' . $cols[6] . "\",\n";
        $json .= '            "var7" : "' . $cols[7] . "\",\n";
        $json .= '            "var8" : "' . $cols[8] . "\",\n";
        $json .= '            "var9" : "' . $cols[9] . "\",\n";
        $json .= '            "var10" : "' . $cols[10] . '"';
        $json .= "\n        }";

        if ($i !== $len - 1) {
            $json .= ',';
        }

        $i++;
    }
    $json .= "\n    ]\n}";

    return $json;
}

$json = csvToJSON($csv);
$json = preg_replace('/[ \n]/', '', $json);

header('Content-Type: text/plain');
header('Cache-Control: no-cache');
echo $json;

Переменная $ csv - это строка, полученная в результате запроса cURL, который возвращает содержимое CSV.

Я уверен, что это не самый эффективный PHP-код для делаю это, потому что я начинающий разработчик и мои знания PHP невысоки. Есть ли лучше, более эффективный способ конвертировать CSV в JSON с помощью PHP?

Заранее спасибо.

Примечание. Я знаю, что добавляю пробелы, а затем удаляю их, я делаю это, чтобы иметь возможность вернуть «читаемый» JSON, удалив строку $ json = preg_replace ('/ [\ n] /', ' ', $ json); в целях тестирования.

Изменить. Спасибо за ваши ответы, на их основе новый код выглядит следующим образом:

function csvToJson($csv) {
    $rows = explode("\n", trim($csv));
    $csvarr = array_map(function ($row) {
        $keys = array('var0','var1','var2','var3','var4','var5','var6','var7','var8','var9','var10');
        return array_combine($keys, str_getcsv($row));
    }, $rows);
    $json = json_encode($csvarr);

    return $json;
}

$json = csvToJson($csv);

header('Content-Type: application/json');
header('Cache-Control: no-cache');
echo $json;
10
задан VerizonW 27 January 2011 в 05:34
поделиться