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

PHP代码报错:Trying to access array offset on value of type float 求助

问题排查与解决

错误原因

你遍历了API返回的顶层数组,但顶层数组中包含latitude、longitude这类float类型的字段,当循环到这些字段时,尝试用数组偏移量(如$value["time"])访问float类型的值,就会触发Trying to access array offset on value of type float错误。

另外,API返回的每日数据都嵌套在daily字段下,且time、wave_height_max、wind_wave_height_max是三个平行的数组,需要按索引对应匹配每一天的数据,而非直接遍历顶层数组。

修正后的代码

<?php
$url = 'https://marine-api.open-meteo.com/v1/marine?latitude=10.307&longitude=-85.839&daily=wave_height_max,wind_wave_height_max&timezone=auto';
$data = file_get_contents($url);
$array = json_decode($data, true);

// 先检查daily字段是否存在,避免空值报错
if (!empty($array['daily'])) {
    $dailyData = $array['daily'];
    // 获取数据的天数,以time数组长度为准
    $dayCount = count($dailyData['time']);
    
    echo "<table border='1'>";
    // 输出表头
    echo "<tr><th>日期</th><th>最大浪高(m)</th><th>最大风浪高(m)</th></tr>";
    
    // 按索引循环,匹配对应日期的各项数据
    for ($i = 0; $i < $dayCount; $i++) {
        echo "<tr>";
        echo "<td>" . $dailyData['time'][$i] . "</td>";
        echo "<td>" . $dailyData['wave_height_max'][$i] . "</td>";
        echo "<td>" . $dailyData['wind_wave_height_max'][$i] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "未获取到有效数据";
}
?>

修改说明

  1. 直接定位到$array['daily'],只处理包含每日数据的结构,避开顶层的非数组字段
  2. 增加了empty()判断,防止API返回异常时出现报错
  3. 使用for循环按索引遍历,确保日期、浪高、风浪高的数据一一对应
  4. 添加了表头,让表格更易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:50:27