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 "未获取到有效数据"; } ?>
修改说明
- 直接定位到
$array['daily'],只处理包含每日数据的结构,避开顶层的非数组字段 - 增加了
empty()判断,防止API返回异常时出现报错 - 使用
for循环按索引遍历,确保日期、浪高、风浪高的数据一一对应 - 添加了表头,让表格更易读
内容的提问来源于stack exchange,提问作者Mariano
相关产品推荐
相关产品推荐

