迭代 CSV 文件中的列 (PHP)

2024-01-08

我需要编写一个函数,以年份和温度作为输入,并返回给定年份中温度等于或低于给定温度的天数。由于数据是关于小时而不是天,因此需要找到小时数并将其除以 24。

示例:getDaysUnderTemp(2019, -10) 返回 13.92。

CSV 文件如下所示(年、月、日、小时、温度):

2019,1,1,0,0.1
2019,1,1,1,0.4
2019,1,1,2,0.8
2019,1,1,3,1.3
2019,1,1,4,1.8
...
2020,1,1,0,-3.9

到目前为止,我的代码如下所示(我是 php 新手):

function getDaysUnderTemp(int $targetYear, float $targetTemp): float {

    $inputFile = fopen("data/temperatures-debug.csv", "r");

    while (!feof($inputFile)) {

        $file = fgetcsv($inputFile);

        $hours = intval($file[3]);

        if (intval($file[0]) === $targetYear and floatval($file[4]) <= $targetTemp) {
            ???
            return ??? / 24;
        }

        fclose($inputFile);
    }
    return "error";
}

问题是我不知道如何迭代代表特定年份的小时数的列,然后将它们全部加在一起。


你离解决方案已经不远了。

function getDaysUnderTemp($targetYear, $targetTemp): float 
{
    $hours = 0; 

    if ((($handle = fopen("data.csv", "r")) !== FALSE)) {

        while (($data = fgetcsv($handle)) !== FALSE) {
            // [0] -> year [1] -> month [2] -> day [3] -> hours [4] -> temp 
            if ($data[0] == $targetYear && $data[4] <= $targetTemp) {
                $hours += $data[3];
            } 
        }

        fclose($handle); 
    }

    return $hours / 24; 
}

你的逻辑是正确的,我只是重构了代码并修复了一些小问题:

  • 你的函数一定会返回一个float值,但由于在您的代码中,当未找到匹配项时,您将返回字符串“error”,因此它会在某些时候引发异常。我现在回来了$hours / 24所以现在问题解决了;
  • 每次迭代后,您可以通过调用关闭指向文件的指针fclose($inputFile),这可能会导致一些问题,因为feof函数需要一个未关闭的有效流才能正常工作。现在fclose工作完成后,函数仅被调用一次;

为了打印结果,我建议您使用printf函数如下:

 printf("%.2f", getDaysUnderTemp(2019, -10); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迭代 CSV 文件中的列 (PHP) 的相关文章

  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • 使用 Laravel Socialite 登录 facebook

    然而 我是 Laravel 的新手 我正在遵循以下教程http www codeanchor net blog complete laravel socialite tutorial http www codeanchor net blog
  • Ace Editor 自动完成和多种语言

    如何为 Ace 编辑器创建自动完成功能以及如何突出显示 php 中的 html javascript 和 csshttp ace ajax org http ace ajax org
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 为 python 的 csv 阅读器中的特定行添加下标?

    我希望能够通过 csv 阅读器访问 csv 文件的特定行 例如第四行 有没有办法用 python 的 csv reader 模块来做到这一点 您只需解析所有 CSV 文件 然后使用正常的排序索引即可 否则 你可以做这样的事情 def my
  • ruby CSV重复行解析

    我有一些需要处理的 CSV 数据 但无法找到匹配重复项的方法 数据看起来有点像这样 line id name item 1 item 2 item 3 item 4 1 251 john foo foo foo foo 2 251 john
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 使用 JSONKit 解析 JSON 文件

    我正在构建一个音叉应用程序 货叉应允许最多 12 个预设节距 此外 我希望允许用户选择一个主题 每个主题都会加载一组预设 不必使用所有预设 我的配置文件看起来像这样 theme A3 comment An octave below conc
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • 将我的 Laravel 连接到外部数据库

    如何将 Laravel 连接到外部数据库 示例 我的本地计算机上有一个 Laravel 它在 xampp 上运行 我希望它连接到云服务器数据库 打开 env文件并编辑它 只需设置正确的外部数据库凭据 DB CONNECTION mysql
  • 如何获取 tokio-io 的 async_read 文件句柄

    我想从文件句柄中流式传输行 但我不知道如何满足File has async read use std fs File use std io BufReader BufRead use tokio core reactor Handle us
  • Monolog:通过邮件发送错误日志会导致每个发送的错误都会收到一封额外的邮件

    对于通过邮件发送的每个错误日志 我们都会收到另一封额外的电子邮件 其中包含 2 行 smtp 调试日志消息 新创建的 symfony 演示 symfony new demo 配置独白以通过邮件发送错误消息 如docs https symfo
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • PHP cURL 看不到 /etc/hosts 文件

    我在让 PHP cURL 库识别我在我的文件中创建的别名时遇到了麻烦 etc hosts file 这就是我的 etc hosts现在归档 192 168 0 20 www example dev 在另一端 192 168 0 20 Apa
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • 如何处理致命错误:cURL错误7:无法连接到xxxx端口443

    我有一个连接到第三方 API 的脚本 它是并且应该在 24 7 不间断循环上运行 我在重新启动循环之前在最后使用睡眠 问题是 有时第三方 API 会被拒绝 或者连接会因以下错误而中断 致命错误 未捕获的异常 GuzzleHttp Ring
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • WordPress 子主题包括包含文件

    我在一家WordPress使用 AMPPS 作为本地主机在我的本地计算机上进行设置 使用 Delta 主题 我创建了一个子主题 delta2 child 初始设置效果很好 但是 我需要更改包含文件夹中名为 home slider php 的
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea

随机推荐

  • 并行计算右侧的连续零位(尾随):解释?

    考虑这个链接 http graphics stanford edu seander bithacks html ZerosOnRightParallel来自 Bit Twiddling Hacks 网站 为了计算尾随位 使用以下算法 uns
  • 预期类型为“System.Int64”,但实际值的类型为“System.String”

    有时 我们应用程序的用户会收到此信息无效强制转换异常预期类型为 System Int64 但实际值的类型为 System String 我们无法重现这种情况 并且它发生在identityDataGrid 模型的 DataGrid Id 字段
  • 如何识别每个簇内的序列?

    使用作为一部分的 biofam 数据集TraMineR library TraMineR data biofam lab lt c P L M LM C LC LMC D biofam seq lt seqdef biofam 10 25
  • 分页库使数据源无效不起作用

    最近我正在尝试这个 我有一个由数据源支持的作业列表 我正在使用分页库 并且作业列表中的每个项目都有一个保存按钮 并且该保存按钮将数据库中作业的状态从未保存更新为已保存 反之亦然 一旦更新 它就会使数据源失效 现在失效应该会导致当前页面立即重
  • 如何将这个基于表格的布局转换为 CSS?

    我有一个基于表格的布局 高度 宽度为 100 没有滚动条 标题 红色 自动扩展以适应内容 但我不知道它会有多少像素 下面的流体表准确地给出了我的内容 table height 100 width 100 tr height 1 td Fit
  • 如何使用 StreamReader 和 StreamWriter 创建文件副本

    我需要使用 StreamReader 在控制台应用程序上读取 txt 文件 然后创建一个名称不同但内容相同的新文件或备份 问题是我无法弄清楚如何使用第一个文件中的内容放入新文件中 这是学校的事情 我是 C 新手 using System u
  • matplotlib `imshow(interpolation='nearest')` 有什么作用?

    I use imshow功能与interpolation nearest 在灰度图像上并得到一个漂亮的彩色图片 看起来它为我做了某种颜色分割 到底发生了什么 我也想得到类似的图像处理功能 numpy 数组上是否有一些函数 例如interpo
  • 毕加索图像不显示

    一张图像显示在我的应用程序上 另一张图像没有显示 但是都可以从浏览器访问 我的免费主机中的这个未显示在我的应用程序上 请注意 我可以从免费主机服务器看到图像 http www justedhak comlu com images uploa
  • Angular 指令隔离范围上的可选双向绑定

    question 我刚刚了解到您可以通过以下方式进行可选的 反向 或回调绑定 scope parentScopeFunc 我正在尝试查看是否有一种方法可以对双向绑定执行类似的操作 scope optional2WayBoundProp 我尝
  • 如何在 Spring MVC 中使用带注释的映射来实现不区分大小写的 URL

    我已经通过我的 spring mvc Web 应用程序很好地注释了映射 但是它们区分大小写 我找不到一种方法使它们不区分大小写 我很乐意在 Spring MVC 中实现这一点 而不是以某种方式重定向流量 Spring 4 2将支持不区分大小
  • Flutter 通过拖动调整 TextField 大小

    有什么方法可以创建类似这些点的东西 这可以帮助扩展TextField 截屏 创建一个小部件 class ExpandableTextField extends StatefulWidget final double height final
  • GCP:警报触发时是否可以触发云功能?

    我正在使用谷歌云平台的谷歌云监控 我为我监控的对象创建了一些警报策略 但是 当有警报触发时 有些信息未包含在我希望包含在电子邮件中的信息中 因此 我正在考虑使用云功能 如果在这种情况下可以的话 该功能将触发我创建的策略之一 如果可能的话 请
  • TypeError:不支持的操作数类型 -:python 3.x Anaconda 中的“str”和“str”

    我正在尝试在大型数据集中每小时计算一些实例 下面的代码似乎在 python 2 7 上运行良好 但我必须将其升级到 3 x 最新版本的 python 并在 Anaconda 上更新所有包 当我尝试执行该程序时 我正在跟踪str error
  • MySQL 有没有办法隐式地为表创建主键?

    在MySQL中 当CREATE TABLE时 MySQL是否有办法隐式创建一个列 即CREATE TABLE命令中未显式声明的列 作为表的主键 Thanks 不 需要在表上定义主键 您可能正在考虑this https dev mysql c
  • Rails - 如何向用 javascript 创建的表单添加 CSRF 保护?

    我正在使用backbone js 它效果很好 但我作为 JavaScript 模板创建的表单缺少 Rails csrf 保护令牌 如何将其添加到我用 JavaScript 创建的模板中 我解决这个问题的最好方法是在表单中 Update 它看
  • JQuery 验证多个字段并出现一个错误

    我将如何使用 JQuery Validate 插件为 3 个字段提供一条错误消息 例如 3 个 dob 字段 默认情况下 如果所有 3 个字段都留空 我将收到 3 条错误消息 我只想将一个错误链接到 3 个字段 如果有空白 则会出现错误 类
  • 自动调整 SVG 大小?

    这里有一个代码演示 http jsfiddle net y59MR 1 我有一个高度未知的 SVG 我可以在加载 json 并使用 javascript math 后弄清楚它 但是有没有可以使用的 css 来动态调整它的大小 css svg
  • UTF-8 与 Latin1 mysql,UTF-8 上未使用索引

    我尝试使用 UTF 8 和 Latin1 字符集创建 mysql 表 当我使用 Latin1 时 会使用索引 而当我使用 UTF 8 时 选择 限制记录时不会使用索引 我的字符集是否缺少某些内容导致发生这种情况 Cheers Ke 仅当表达
  • .gitattributes 中没有扩展名的文件

    我正在尝试处理 gitattributes 中没有扩展名的文件 text auto eol lf py eol lf 显然没有帮助 git check attr all foo输出 foo 文本 自动 如何才能做到这一点 我认为您必须为所有
  • 迭代 CSV 文件中的列 (PHP)

    我需要编写一个函数 以年份和温度作为输入 并返回给定年份中温度等于或低于给定温度的天数 由于数据是关于小时而不是天 因此需要找到小时数并将其除以 24 示例 getDaysUnderTemp 2019 10 返回 13 92 CSV 文件如