如何在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]);
代码说明
pluck('T.SIEL.SIE'):通过点语法精准提取目标数组,比泛用的flatten更高效,避免无关层级干扰flatten(1):将嵌套的SIE数组展平,让集合中每个元素对应一个商品对象,和之前处理后的$data结构保持一致- 保留了原有的
map字段移除逻辑,只需定义$keysToRemove即可复用之前的字段清理逻辑
Blade视图无需修改
原有的Blade表格代码可以直接复用,因为处理后的$data结构和之前完全一致:都是由单个对象组成的集合,每个对象对应表格的一行数据。
内容的提问来源于stack exchange,提问作者Adolfi Téllez
相关产品推荐
相关产品推荐

