Laravel Blade遍历嵌套数组报错:Trying to access array offset on value of type int
错误原因与解决方案
错误原因
你给出的$row['status']是单个关联数组(而非数组集合),但你用foreach遍历它。遍历关联数组时,循环变量$r会依次拿到每个键对应的值(比如groupId对应的3、groupName对应的DELIVERED),这些值是int或string类型,不是数组。当你尝试访问$r['groupName']时,自然会触发“在int类型值上访问数组偏移量”的错误。
解决方案
根据你的数据结构,直接去掉内层foreach,直接访问status数组的groupName字段即可:
@foreach($response['results'] as $row) <tr> <td> Status- {{ $row['status']['groupName'] }} </td> <td>{{ \Carbon\Carbon::parse($row['sentAt'])->diffInSeconds(\Carbon\Carbon::parse($row['from'])) }}</td> <td>{{ \Carbon\Carbon::parse($row['doneAt'])->diffInSeconds(\Carbon\Carbon::parse($row['to'])) }}</td> </tr> @endforeach
如果存在部分status是多元素数组的情况(即部分结果里status是数组集合),可以增加判断逻辑兼容两种情况:
@foreach($response['results'] as $row) <tr> <td> @if(is_array($row['status'])) @if(is_array(reset($row['status']))) @foreach($row['status'] as $r) Status- {{ $r['groupName'] }}<br> @endforeach @else Status- {{ $row['status']['groupName'] }} @endif @endif </td> <td>{{ \Carbon\Carbon::parse($row['sentAt'])->diffInSeconds(\Carbon\Carbon::parse($row['from'])) }}</td> <td>{{ \Carbon\Carbon::parse($row['doneAt'])->diffInSeconds(\Carbon\Carbon::parse($row['to'])) }}</td> </tr> @endforeach
额外注意事项
你代码中的{{$row['from'] - $row['sentAt']}}是字符串直接做减法,会导致计算结果异常。Laravel内置Carbon日期处理库,建议先将日期字符串转为Carbon实例,再计算时间差(可根据需求替换diffInSeconds为diffInMinutes、diffInHours等)。
内容的提问来源于stack exchange,提问作者Hola
相关产品推荐
相关产品推荐

