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

Laravel中如何正确遍历多维PHP数组渲染手风琴数据

Laravel Blade嵌套循环渲染手风琴数据错误修复

问题场景

需要在Laravel Blade模板中通过嵌套foreach循环渲染多维数组中的手风琴数据,由于手风琴数量不固定必须使用嵌套循环,但目前无法正常加载accordion数组的数据,前端始终报错。

原数组定义(treatments.php)

'treatments' => [
    [
        'img' => asset('img/logos/Dermatologie_Dr_med_Aresu_Naderi_Nienstedten_Logo.png'),
        'title' => 'Klassische Dermatologie',
        'teaser' => 'Ein wesentlicher Bestandteil im Behandlungskonzept meiner Hautarztpraxis ist die ästhetische Dermatologie und Lasermedizin.',
        'pop-up' => 'derma',
        'accordion' => [
            [
                'title' => 'test',
                'content' => 'test2',
            ],
            [
                'title' => 'test',
                'content' => 'test2',
            ],
        ],
    ],
]

原Blade模板代码

<div class="row">
    @foreach( $treatments as $key => $value)
        <?php print_r($value) ?>
        <div class="col-md-4 py-5">
            <img class="w-100" src="{!! __($value['img']) !!}" alt="{!! __($value['title'])  !!}">
        </div>
        <div class="col-md-8 py-5">
            <span class="treatmentsHeadline">{!! __($value['title'])  !!}</span>
            <p class="pt-3">{!! __($value['teaser'])  !!}</p>
            <div class="pt-3">
                <button class="button-naderi" href="#{!! __($value['pop-up']) !!}">Mehr erfahren</button>
                <button class="button-naderi" href="#{!! __($value['pop-up']) !!}">Termin vereinbaren</button>
            </div>
        </div>
            @foreach($value as $acc)
                <p>{!! __($acc['title']) !!}</p>
            @endforeach
    @endforeach
    <p class="footer-vh"></p>

</div>

错误原因

内层@foreach($value as $acc)遍历的是当前治疗项的所有键值对(包括img、title、teaser等字符串类型的值),当代码尝试访问$acc['title']时,$acc此时是字符串而非数组,因此会抛出非法字符串偏移量的错误。

修复后的Blade代码

需要将内层循环的遍历对象改为$value['accordion'],同时建议增加存在性判断,避免部分治疗项没有手风琴数据时报错:

<div class="row">
    @foreach( $treatments as $treatment)
        <div class="col-md-4 py-5">
            <img class="w-100" src="{!! __($treatment['img']) !!}" alt="{!! __($treatment['title']) !!}">
        </div>
        <div class="col-md-8 py-5">
            <span class="treatmentsHeadline">{!! __($treatment['title']) !!}</span>
            <p class="pt-3">{!! __($treatment['teaser']) !!}</p>
            <div class="pt-3">
                <button class="button-naderi" href="#{!! __($treatment['pop-up']) !!}">Mehr erfahren</button>
                <button class="button-naderi" href="#{!! __($treatment['pop-up']) !!}">Termin vereinbaren</button>
            </div>
        </div>

        <!-- 渲染手风琴数据 -->
        @if(isset($treatment['accordion']) && is_array($treatment['accordion']))
            @foreach($treatment['accordion'] as $item)
                <div class="accordion-item">
                    <h3>{!! __($item['title']) !!}</h3>
                    <div>{!! __($item['content']) !!}</div>
                </div>
            @endforeach
        @endif
    @endforeach
    <p class="footer-vh"></p>
</div>

说明

  1. 将循环变量重命名为$treatment,比$value更具语义化,提高代码可读性
  2. 内层循环明确遍历$treatment['accordion']数组,只处理手风琴数据
  3. 增加isset()和is_array()判断,确保只有当手风琴数据存在且为数组时才执行循环,避免潜在错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:27