如何在Laravel Blade中正确遍历多元素JSON数组?
解决JSON数组多元素遍历报错问题
你遇到的核心问题是单元素和多元素场景下传递给视图的数据结构不一致:
- 单元素时,你传递的是数组中的单个
{T: ...}对象,Blade遍历的是该对象的属性(拿到T对应的{HD: ...}对象); - 多元素时,你传递的是包含多个
{T: ...}对象的数组,此时直接遍历数组得到的是外层{T: ...}对象,而该对象没有HD属性,因此触发报错。
方案1:修改Blade模板适配多元素结构
直接调整模板的循环层级,先遍历外层数组,再逐层访问T和HD:
<tbody> @foreach($data as $entry) <tr> @foreach($entry->T->HD as $title) <td>{{ $title }}</td> @endforeach </tr> @endforeach </tbody>
同时,单元素场景的Controller可以统一改为传递整个数组(无需取$data[0]),这样不管单/多元素,逻辑完全一致:
$data = '[{ "T": { "HD": { "HD01": "1", "HD02": "06033942", "HD03": "3736803" } } }]'; $data = json_decode($data); // 直接传递整个解码后的数组 return view('dashboard.book.index', ['data' => $data]);
方案2:在Controller中统一数据结构
如果你想保留原Blade模板的逻辑,可以在Controller中对数据做预处理,把每个元素的T属性提取出来,统一成{HD: ...}对象的数组:
// 单/多元素场景通用代码 $data = json_decode($data); // 提取每个元素中的T属性,组成新数组 $processedData = array_map(function($item) { return $item->T; }, $data); return view('dashboard.book.index', ['data' => $processedData]);
这种方式下,Blade模板无需修改,不管单/多元素,$data都是{HD: ...}对象的数组,和你原来单元素场景的结构一致。
内容的提问来源于stack exchange,提问作者Adolfi Téllez
相关产品推荐
相关产品推荐

