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

Laravel视图遍历报错:Cannot access offset of type string on string

问题:Laravel视图访问数组元素报错“Cannot access offset of type string on string”

我尝试向Laravel视图传递模拟数据,但在访问数组元素时持续报错“Cannot access offset of type string on string”。作为PHP新手,不清楚报错原因,寻求技术帮助。

路由代码

Route::get('/', function () {
    return view('home', [
        'jobs' => [
            'title' => 'Influencer',
            'salary' => '790,340'
        ],
        [
            'title' => 'Farmer',
            'salary' => '560,890'
        ],
        [
            'title' => 'Doctor',
            'salary' => '760,881'
        ],
        [ 
            'title' => 'Engineer',
            'salary' => '1,247,122'
        ]
    ]);
});

视图代码

<x-layout>
    <x-slot:heading>
        Home Page
    </x-slot:heading>

    @foreach ($jobs as $job)
        <li>{{ $job['title'] }}</li>
    @endforeach
</x-layout>

问题原因与解决方法

错误原因

你传递jobs数据的格式有误:当前代码中,'jobs'只赋值了第一个job数组,后面的三个job数组是作为视图数据的独立项存在的,并没有包含在jobs的数组里。这导致$jobs实际上是一个单个的关联数组(仅包含Influencer那一条数据),而非你预期的多个job组成的多维数组。

当你用@foreach遍历$jobs时,实际是在遍历这个关联数组的键(title、salary),此时循环变量$job是字符串类型(比如'title'),再去访问$job['title']就会触发报错——字符串不支持数组偏移量访问方式。

修正后的路由代码

Route::get('/', function () {
    return view('home', [
        'jobs' => [
            [
                'title' => 'Influencer',
                'salary' => '790,340'
            ],
            [
                'title' => 'Farmer',
                'salary' => '560,890'
            ],
            [
                'title' => 'Doctor',
                'salary' => '760,881'
            ],
            [ 
                'title' => 'Engineer',
                'salary' => '1,247,122'
            ]
        ]
    ]);
});

修正说明

把所有job的数组都包裹在'jobs' => []这个外层数组内部,这样$jobs就变成了包含4个元素的多维数组。此时@foreach遍历的是每个job项,$job是包含title和salary的关联数组,访问$job['title']就可以正常获取数据了。

内容的提问来源于stack exchange,提问作者BARIMA YAW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:30:56