-1

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

$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 格式并显示如下:

["2013 年 4 月 20 日","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

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

4

1 回答 1

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 - 将两个数组(相同长度)合并为一个关联数组?”

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”几乎涵盖了同样的事情。

于 2013-04-24T20:02:18.683 回答