【问题标题】:JSON Array Export to CSV in PHP在 PHP 中 JSON 数组导出为 CSV
【发布时间】:2016-03-21 18:41:52
【问题描述】:

我正在尝试导出为 csv,即具有以下格式的 JSON:

$json_file2{
            "errors":
                    {
                    "code":0,
                    "text":""
                    },
            "results":
                    {
                    "resultado":
                    [
                        {
                        "referencia":"00000",
                        "cantidad":"24",
                        "cantidad_proveedor":null,
                        "delivery_time":"delivery time 2 days"
                        },
                        {
                        "referencia":"00001",
                        "cantidad":"24",
                        "cantidad_proveedor":"48",
                        "delivery_time":""
                        },
                        {
                        "referencia":"00098_1",
                        "cantidad":"96",
                        "cantidad_proveedor":null,
                        "delivery_time":"delivery time 4 days"
                        }
                    ]
                }
            }

我需要导出到 csv

"referencia":"00000",
"cantidad":"24",
"cantidad_proveedor":null,
"delivery_time":"delivery time 2 days"

采用这种格式:

"00000","24",null,"delivery time 2 days"
"00001","24","48",""
"00098_1","96",null,"delivery time 4 days"
......

我试着按照我正在学习的方式去做

$decoded = json_decode($json_file2);
$comments = $decoded->data[0]->results->resultado;
$fp = fopen('stock2.csv', 'w');
foreach($comments as $comment){
   fputcsv($fp,$comment);
}

但它总是给我错误foreach: 警告:为 foreach() 提供的参数无效

我哪里做错了? 坦克

【问题讨论】:

    标签: php json foreach fputcsv


    【解决方案1】:

    您必须将一个数组传递给 fputcsv。使用此代码:

    fputcsv($fp,(array)$comment);

    【讨论】:

    • 警告:为 foreach() 提供的参数无效
    【解决方案2】:

    $json_file2 中没有数据数组字段。 您必须改用 $decoded->results->resultado。并将 $comment 转换为 Brian 所说的 array

    最终代码如下所示:

    $decoded = json_decode($json_file2);
    $comments = $decoded->results->resultado;
    $fp = fopen('stock2.csv', 'w');
    foreach($comments as $comment) {
        fputcsv($fp, (array)$comment);
    }
    

    通过该更改,您将获得类似的结果:

    00000,24,,"delivery time 2 days"
    00001,24,48,
    00098_1,96,,"delivery time 4 days"
    

    也许你应该编写你自己的 fputcsv 函数来获得你想要的结果,用 null 和带引号的数字。

    【讨论】:

    • 完美的宇进!谢谢!我不能给你一个积极的,没有足够的声誉:(
    • @Juanjo 您可以通过单击该项目左侧的复选标记来接受答案。这会给用户 +15 声望,我相信会给你 +2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多