为了账号安全,请及时绑定邮箱和手机立即绑定

使用 PHP 将气象站 API URL 转换为 csv

使用 PHP 将气象站 API URL 转换为 csv

PHP
千巷猫影 2023-08-19 10:34:39
我正在尝试使用我的气象站的 API,据我所知是 JSON 格式,并转换为 csv 文件。API返回:[{"macAddress":"xx:xx:xx:xx:xx:xx","lastData":{"dateutc":1595258880000,"tempinf":74.3,"humidityin":44,"baromrelin":29.929,"baromabsin":29.235,"tempf":85.5,"battout":1,"humidity":62,"winddir":167,"windspeedmph":0.2,"windgustmph":1.1,"maxdailygust":9.2,"hourlyrainin":0,"eventrainin":0,"dailyrainin":0,"weeklyrainin":0,"monthlyrainin":0.571,"totalrainin":1.823,"solarradiation":832.38,"uv":8,"feelsLike":90.84,"dewPoint":70.96,"feelsLikein":73.5,"dewPointin":51,"tz":"America/Chicago","date":"2020-07-20T15:28:00.000Z"},"info":{"name":"MyWeatherStation","coords":{"coords":{"lon":134.65635809999999,"lat":32.6587316},"address":"100Park Lane, Yourtown, TN 77777,USA","location":"Yourtown","elevation":146.7066497802734,"geo":{"type":"Point","coordinates":[134.65635809999999,32.6587316]}}}}]通过 wtools.io/convert-json-to-php-array 格式化的代码网页代码:<?php // Read JSON file $readjson = file_get_contents("https://weather_api") ;//Decode JSON $data = json_decode($readjson, true);//Print data print_r($data); echo "<br/><br/> Weather Stats are: <br/>";//function to convert to csv file //Give our CSV file a name. $csvFileName = 'example.txt';   //Open file pointer. $fp = fopen($csvFileName, 'w');   //Loop through the associative array. foreach($data as $row){    //Write the row to the CSV file.      fputcsv($fp, $row); }//Finally, close the file pointer. fclose($fp);文件已创建,但我没有获得正确的数据。评论/想法将不胜感激。xx:xx:xx:xx:xx:xx,数组,数组
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您需要展平数组(意味着将每个值放入第一个维度)。


应用于您的示例,您需要这样的东西:

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));

$csvArray = [];

foreach($iterator as $value) {

    $csvArray[] = $value;

}


fputcsv($fp, $csvArray);

工作示例

编辑 - 更具可读性的数组扁平化器

function getFlatArray($data, $keyPrefix = '') {

    $result = [];

    

    foreach ($data as $key => $value) {

        $newKey = $keyPrefix . $key;

        

        if (!is_array($value)) {

            $result[$newKey] = $value;

        } else {

            $result += getFlatArray($value, $newKey . '-');

        }

    }

    

    return $result;

}


$csvArray = getFlatArray(array_pop($data));


fputcsv($fp, array_keys($csvArray)); // add keys to first line

fputcsv($fp, $csvArray);

工作示例



查看完整回答
反对 回复 2023-08-19
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号