You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现:根据目标温度生成年度低温天数字典函数

实现getDaysUnderTempDictionary函数的两种方案

现有getDaysUnderTemp函数可计算单一年份内气温≤目标温度的天数,现在要实现一个函数,返回所有年份对应的低温天数数组,这里提供两种可行方案:

方案一:直接实现(推荐,仅读取一次文件)

这种方法只需要遍历CSV文件一次,统计各年份符合条件的小时数,最后统一转换为天数,效率远高于多次调用现有函数。

function getDaysUnderTempDictionary(float $targetTemp): array {
    $file = fopen("data/temperatures-filtered.csv", "r");
    $yearHours = []; // 存储各年份的符合条件小时数

    while ($data = fgetcsv($file)) {
        $year = (int)$data[0];
        $temp = (float)$data[4];
        
        if ($temp <= $targetTemp) {
            // 对应年份小时数累加,未初始化则设为0后再加1
            $yearHours[$year] = isset($yearHours[$year]) ? $yearHours[$year] + 1 : 1;
        }
    }
    
    fclose($file);
    
    // 将小时数转为天数,保留两位小数对齐示例输出格式
    $yearDays = [];
    foreach ($yearHours as $year => $hours) {
        $yearDays[$year] = round($hours / 24, 2);
    }
    
    return $yearDays;
}

方案二:复用现有getDaysUnderTemp函数(简单但效率低)

如果一定要复用现有函数,需要先提取CSV中所有唯一年份,再逐个调用原函数。但这种方法会多次打开并读取CSV文件,数据量大时性能很差,仅适合小数据场景。

function getDaysUnderTempDictionary(float $targetTemp): array {
    // 先提取所有唯一年份
    $file = fopen("data/temperatures-filtered.csv", "r");
    $uniqueYears = [];
    while ($data = fgetcsv($file)) {
        $year = (int)$data[0];
        $uniqueYears[$year] = true; // 利用数组键去重
    }
    fclose($file);
    
    // 遍历年份调用原函数生成结果
    $result = [];
    foreach (array_keys($uniqueYears) as $year) {
        $result[$year] = round(getDaysUnderTemp($year, $targetTemp), 2);
    }
    
    return $result;
}

测试调用getDaysUnderTempDictionary(-10),就能得到类似示例的数组输出,键为年份,值为保留两位小数的低温天数。

内容的提问来源于stack exchange,提问作者babygroot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:30:59