【发布时间】:2018-06-09 18:00:28
【问题描述】:
试图将返回 JSON 的 API 的多个页面放入一个 CSV 文件中。目前,将循环的最大页面数量设置为 120 就足够了。
这是第一个没有任何循环的请求,它创建了一个工作 CSV 文件 (output.txt)。
<?php
$pageNo = "1";
$jsonString = file_get_contents("http://api.domain.com/apikey/?
name1=value1&name2=value2&pageNo=$pageNo");
$jsonDecoded = json_decode($jsonString, true);
$csvHeader=array();
$csvData=array();
$csvFileName = 'output.txt';
$fp = fopen($csvFileName, 'w');
$counter=0;
foreach($jsonDecoded["result"]["items"] as $key => $value)
{
jsontocsv($value);
if($counter==0)
{
fputcsv($fp, $csvHeader, ';');
$counter++;
}
fputcsv($fp, $csvData, ';');
$csvData=array();
}
fclose($fp);
function jsontocsv($data)
{
global $csvData,$csvHeader;
foreach($data as $key => $value)
{
if(!is_array($value))
{
$csvData[]=$value;
$csvHeader[]=$key;
}
else
{
jsontocsv($value);
}
}
}
?>
我猜这应该在一个 while 循环中,最后有 ++$pageNo 之类的东西,更新值。但是,所有先前的尝试都导致文件每次都被覆盖,并且只有最后一页被写入文件。每次循环时如何向 CSV 添加内容?不过,理想情况下,每次整个脚本运行时(每天一次),整个 CSV 文件都将替换为更新后的值。
谢谢
【问题讨论】: