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

如何在Blade中遍历包含内部数组的JSON数组?

问题背景

我正在使用MongoDB,目前已能正确遍历以下JSON并处理数据实现展示:

原有Controller代码

$json = '[{"T": {"HD": {"HD01": "1","HD06": "20201006033942","HD08": "3736803"}}},{"T": {"HD": {"HD01": "1","HD06": "20201006035419","HD08": "3736803"}}}]';
$keysToRemove = ['HD01', 'HD06'];
$data = collect(json_decode($json, true))->flatten(2)->map(function ($array, $key) use ($keysToRemove) {
    foreach ($keysToRemove as $key) {
        if (array_key_exists($key, $array)) {
            unset($array[$key]);
        }
    }
    return $array;
});
return view('dashboard.book.index', ['data' => $data]);

原有Blade视图代码

<table>
    <tr>
        @foreach ($data->first() as $key => $value)
            <th>{{ $key }}</th>
        @endforeach
    </tr>
    @foreach ($data as $items)
        <tr>
            @foreach ($items as $key => $value)
                <td>{{ $value }}</td>
            @endforeach
        </tr>
    @endforeach
</table>

现在需要处理另一段包含内部数组的JSON,结构如下:

目标JSON结构(Controller中定义)

$data = '[{"T": {"SIEL" : {"SIE" : [{"sequenceNumber" : 0,"itemId" : "3010","itemDescription" : "BAN VACCINE COSTELLET","unitAmount" : 29950,"quantity" : 1.405,"subTotalAmount" : 42080,"discountAmount" : 0,"totalAmount" : 42080},{"sequenceNumber" : 1,"itemId" : "1010","itemDescription" : "CROLETA COOKIE","unitAmount" : 4800,"quantity" : 0.605,"subTotalAmount" : 2904,"discountAmount" : 0,"totalAmount" : 2904}]}}}]';

请问如何沿用之前的逻辑来遍历这段JSON,获取其中的'SIE'数据?


解决方案

可以沿用之前的集合操作逻辑,调整层级提取和处理步骤:

调整后的Controller代码

// 解码JSON为数组
$decodedData = json_decode($data, true);
// 提取SIE数组,沿用集合操作
$data = collect($decodedData)
    // 直接提取每个元素里的T->SIEL->SIE数组
    ->pluck('T.SIEL.SIE')
    // 把嵌套的SIE数组展平成一维集合,每个元素对应单个商品对象
    ->flatten(1)
    // 保留原有字段移除逻辑,按需修改
    ->map(function ($item) use ($keysToRemove) {
        foreach ($keysToRemove as $key) {
            if (array_key_exists($key, $item)) {
                unset($item[$key]);
            }
        }
        return $item;
    });

return view('dashboard.book.index', ['data' => $data]);

代码说明

  1. pluck('T.SIEL.SIE'):通过点语法精准提取目标数组,比泛用的flatten更高效,避免无关层级干扰
  2. flatten(1):将嵌套的SIE数组展平,让集合中每个元素对应一个商品对象,和之前处理后的$data结构保持一致
  3. 保留了原有的map字段移除逻辑,只需定义$keysToRemove即可复用之前的字段清理逻辑

Blade视图无需修改

原有的Blade表格代码可以直接复用,因为处理后的$data结构和之前完全一致:都是由单个对象组成的集合,每个对象对应表格的一行数据。


内容的提问来源于stack exchange,提问作者Adolfi Téllez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:21:28