如何在 Laravel Blade 模板中正确遍历嵌套用户数组并渲染表格

本文详解 Laravel Blade 中因错误嵌套循环导致的“Trying to access array offset on the value of type int”错误,提供安全、简洁的 @foreach 替代方案,并附带结构化示例与关键注意事项。

本文详解 Laravel Blade 中因错误嵌套循环导致的“Trying to access array offset on the value of type int”错误,提供安全、简洁的 `@foreach` 替代方案,并附带结构化示例与关键注意事项。

在 Laravel Blade 模板中渲染动态表格时,常见误区是混合使用 @for 和 @foreach 对多维数组进行非对称遍历——正如问题中所示:先用 $i 索引访问 $listusers[$i],再对其执行 @foreach。该写法隐含一个关键假设:$listusers[$i] 必须是一个可遍历的数组或集合;但若实际数据结构为一维索引数组(例如 [[1, 'Alice', 'admin'], [2, 'Bob', 'user']]),或更常见地——$listusers 本身已是用户对象/数组的扁平列表(如 ['id' => 1, 'name' => 'Alice']),那么 $listusers[$i] 就是单个用户项(如关联数组),此时再对它执行 @foreach($listusers[$i] as $key => $listuser) 会导致 $listuser 变成该用户的某个字段值(例如整数 1 或字符串 'Alice'),后续尝试 $listuser['id'] 自然抛出 “Trying to access array offset on the value of type int” 错误。

✅ 正确做法是直接遍历顶层用户集合,避免冗余索引:

<tbody>
    @foreach($listusers as $listuser)
        <tr>
            <th scope="row">{{ $listuser['id'] ?? 'N/A' }}</th>
            <td>{{ $listuser['name'] ?? 'Unknown' }}</td>
            <td>{{ $listuser['email'] ?? '-' }}</td>
            <td>{{ $listuser['role'] ?? 'guest' }}</td>
            <td>{{ $listuser['created_at'] ? \Carbon\Carbon::parse($listuser['created_at'])->format('Y-m-d') : '-' }}</td>
            <td>
                <ul class="list-inline mb-0">
                    <li><a href="{{ route('admin.users.destroy', $listuser['id']) }}" 
                           class="text-danger" title="Delete" onclick="return confirm('确认删除?')">
                        <i class="bi bi-trash"></i>
                    </a></li>
                    <li><a href="{{ route('admin.users.edit', $listuser['id']) }}" 
                           class="text-primary" title="Edit">
                        <i class="bi bi-pencil-square"></i>
                    </a></li>
                </ul>
            </td>
        </tr>
    @endforeach
</tbody>

? 关键说明与最佳实践:

综上,摒弃基于索引的手动循环,拥抱语义明确、健壮安全的 @foreach,是 Laravel Blade 渲染列表数据的黄金准则。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。