【问题标题】:PHP JSON Encode From CSV [duplicate]来自CSV的PHP JSON编码[重复]
【发布时间】:2013-04-18 12:42:57
【问题描述】:

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

$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

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

【问题讨论】:

  • 您是否将标题作为文件的第一行?
  • 查看array_combine() 以添加密钥。并首先构建您的数组,并且只有在while循环之后才执行echo json_encode();

标签: php json


【解决方案1】:

从外观上看,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" 几乎涵盖了同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2012-03-10
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多