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

Laravel开发:foreach循环出现Trying to access array offset on null错误求助

解决「Trying to access array offset on value of type null」错误
  • 错误直接原因:你把$aanwezigheid = $row['aanwezigheid'];写在了while循环外面。当while循环结束时,$result->fetch_assoc()会返回false,此时$row变为null,再去访问它的数组偏移量必然触发报错。

  • 逻辑问题:你原本想收集每位员工的aanwezigheid值,但当前写法只在循环结束后尝试获取一次,此时已无有效数据;另外因为用了LEFT JOIN,部分员工可能没有对应的aanwezigheid记录,该字段值会是null,也需要提前处理。

  • 修正后的代码:

<?php
require "dbconnect.php";

$sql = "SELECT * FROM medewerkers LEFT JOIN aanwezigheid ON medewerkers.ID=aanwezigheid.ID;";
$aanw = []; // 提前初始化数组,避免未定义警告
if($result = $conn->query($sql)){
    echo "<table>"; // 补充完整表格标签
    while($row = $result->fetch_assoc()) {
        echo "<tr>";
        // 输出员工姓名
        echo "<td>" . $row['voornaam'] . " " . $row['achternaam'] . "</td>";
        
        // 处理出勤状态,兼容null值
        $aanwezigheid = $row['aanwezigheid'] ?? null;
        $aanw[] = $aanwezigheid;
        
        // 直接在当前行输出状态图标,和员工姓名对应
        echo "<td>";
        if($aanwezigheid === 1){
            echo '<img src="image/kruismark.png">';
        }elseif($aanwezigheid === 0){
            echo '<img src="image/Checkmark.png">';
        }else{
            // 无出勤记录时的默认显示
            echo "无记录";
        }
        echo "</td>";
        echo "</tr>";
    }
    echo "</table>";

    // 若后续需单独处理$aanw数组,可保留以下代码
    // foreach($aanw as $status){
    //     // 自定义逻辑
    // }
}
?>
  • 关键改动说明:
    1. 将$aanwezigheid的赋值和数组添加逻辑移到while循环内部,确保每一行员工数据都被处理;
    2. 使用??空合并运算符处理可能的null值,避免后续判断出错;
    3. 修正HTML结构,把状态图标放到员工姓名所在的表格行中,保证展示逻辑合理;
    4. 移除echo语句中多余的引号,避免HTML语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:05:20