PHP JSON从CSV编码

时间:2013-04-24 19:49:12

标签: php json

我有一个简单的脚本,如下所示:

$row_to_show = 2;

$handle = fopen('myfile.csv', 'r');
if ($handle !== false) {
    $row_count = 0;
    while($csv_line = fgetcsv($handle)) {
        $row_count++;
        if ($row_count == $row_to_show) {
            $latestResults = ($csv_line);
            echo json_encode($latestResults);
        }
    }
}

它抓取CSV文件中的第二行。然后它将它编码为json,并显示如下:

  

[ “20-APR-2013”​​, “46”, “8”, “34”, “38”, “44”, “42”, “14”, “4”, “MERLIN”]

但是,我想要做的是:

"Date":20-Apr-2013,"ball1":46,"ball2":8,"ball3":34,"ball4":38,"ball5":44"ball6":42,"bonusball":14,"set":4,"machine":MERLIN

我如何实现这一目标?提前致谢

1 个答案:

答案 0 :(得分:0)

从它的外观来看,JSON输出将是我对CSV的期望,因为CSV只是一个值数组。

如果要添加“列标题”信息,则需要创建关联数组。

有时,CSV的第一行包含标题信息,如果是这种情况,您可以将其保存以供日后使用:

/...
$headers = null;
while($csv_line = fgetcsv($handle)) {
    $row_count++;
    // The first row contains the headers, save it
    if($row_count == 1) {
        $headers = $csv_line;
    }
//..

如果没有,您需要手动创建它......

$headers = array('Date', 'ball1', 'ball2',...);

然后,您可以将它们合并为一个关联数组(请参阅SO问题:"PHP - Merge two arrays (same-length) into one associative?"

if ($row_count == $row_to_show) {
    $latestResults = ($csv_line);
    $output = array_combine($headers, $latestResults);
    echo json_encode($output);
}

我希望有所帮助!

修改

感谢Marios评论(我在写这篇文章之后看到),看来SO问题"CSV to Json with header row as key"几乎涵盖了同样的事情。