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

Laravel报Undefined Array Key 'id'及Blade遍历数组无输出问题

问题根源

无输出、报键不存在错误是两个问题叠加导致的:

  • 控制器数组结构写错:用$patient_indoor[] = array();初始化时,已经往数组里塞了一个空的子元素;后续追加患者数据时又多套了一层array(),导致$patient_indoor的元素要么是空数组,要么是「装着患者关联数组的索引数组」,foreach循环拿到的$p根本不是直接带id字段的那层数组,自然读不到$p['id']。
  • Blade语法写错:@foreach($patient_indoor as $p)后面多写了PHP原生的闭合标签?>,会导致Blade模板解析异常。
修复方案

1. 修正控制器数组逻辑

初始化数组不要用追加空元素的写法,追加患者数据时去掉多余的嵌套层:

// 正确初始化空数组
$patient_indoor = [];

// 追加患者数据,直接把关联数组作为顶级元素存入,不要在外层再包array()
$patient_indoor[] = [
    'id' => $p->id,
    'name' => $p->name,
    'mobile' => $p->mobile,
    'due' => $due
];

注意:$patient_indoor = []是定义一个空的患者数组,而你之前写的$patient_indoor[] = array()是往数组里追加一个空元素,二者逻辑完全不同,这是PHP数组操作的常见新手坑。

如果是批量处理多个患者,每次循环都按上面的格式追加即可,不要额外包层。

2. 修正Blade模板代码

删掉@foreach后面多余的?>,同时增加类型判断避免偶发报错:

@foreach($patient_indoor as $p)
    @if(is_array($p) && isset($p['id']))
        <td>{{ $p['id'] }}</td>
        <td>{{ $p['name'] }}</td>
        <td>{{ $p['mobile'] }}</td>
        <td>{{ $p['due'] }}</td>
    @endif
@endforeach
特殊场景适配

如果你的业务必须保留多层嵌套的数组结构(比如按病区/缴费状态分组存患者),那遍历的时候需要多套一层循环,拿到内层真实的患者数据再输出:

@foreach($patient_indoor as $itemGroup)
    {{-- 跳过初始化时留下的空元素 --}}
    @if(empty($itemGroup))
        @continue
    @endif
    @foreach($itemGroup as $p)
        @isset($p['id'])
            <td>{{ $p['id'] }}</td>
        @endisset
    @endforeach
@endforeach

内容的提问来源于stack exchange,提问作者Humaisha Binte Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:39:09