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
相关产品推荐
相关产品推荐

