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

Laravel Blade模板中使用foreach按值将数组拆分为两个数组的实现方法

实现方案

方案1:对应你JS逻辑的直接实现

你可以通过Blade的@php指令编写原生PHP逻辑完成数组拆分,和你写的JS逻辑完全对齐:

{{-- 初始化两个空数组 --}}
@php
    $navlinks = [];
    $legallinks = [];
@endphp

{{-- 遍历排序后的链接并分类存入数组 --}}
@foreach($site->links()->orderBy('position')->get() as $link)
    @php
        if($link->type == 'nav') {
            $navlinks[] = $link;
        }
        if($link->type == 'legal') {
            $legallinks[] = $link;
        }
    @endphp
@endforeach

{{-- 后续直接使用两个数组即可 --}}
@foreach($navlinks as $navLink)
    {{-- 渲染导航链接逻辑 --}}
@endforeach

@foreach($legallinks as $legalLink)
    {{-- 渲染法律类链接逻辑 --}}
@endforeach

Blade视图中同页面用@php定义的变量无需声明global,后续代码可以直接调用。

方案2:更推荐的Laravel原生写法

$site->links()->orderBy('position')->get()返回的是Laravel集合(Collection)对象,你完全不需要手动遍历判断,直接用集合的筛选方法就能快速完成拆分,代码更简洁高效:

@php
    // 先一次性查询到所有排序后的链接
    $allLinks = $site->links()->orderBy('position')->get();
    // 直接按类型筛选,无需手动循环
    $navlinks = $allLinks->where('type', 'nav');
    $legallinks = $allLinks->where('type', 'legal');
@endphp

筛选后的集合和数组的遍历用法完全一致,同时只做了一次数据库查询,性能比手动遍历更好。

优化建议

如果这两个分类后的链接需要在多个视图中使用,建议把拆分逻辑放到控制器或者模型访问器中处理,不要放在Blade模板里,更符合MVC分层规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:48:04