PHP遍历嵌套数组问题:JSON解码后仅获首个结果如何解决
解决PHP数组完整遍历的问题
你现在只拿到首个结果的核心原因是代码里硬编码了Tree1[0],只取了Tree1数组的第一个元素,没有遍历这个数组里的所有项。要实现完整遍历,需要在现有循环内再加一层循环来处理Tree1中的每一个元素。
修改后的基础遍历代码
foreach ($events as $event) { // 遍历 Tree1 数组内的所有元素 foreach ($event['d']['Tree1'] as $treeItem) { echo $treeItem['Tree2']['Field1'] . '<br>'; echo $treeItem['Tree2']['Field2'] . '<br>'; echo $treeItem['Tree2']['Field3'] . '<br>'; // 可选:添加分隔线区分不同的 Tree1 条目 echo '<hr>'; } }
更健壮的版本(避免报错)
如果JSON解码后的数组可能存在结构不完整的情况,建议加上存在性检查,防止出现未定义索引的PHP错误:
foreach ($events as $event) { // 先确认 Tree1 是存在且为数组 if (isset($event['d']['Tree1']) && is_array($event['d']['Tree1'])) { foreach ($event['d']['Tree1'] as $treeItem) { // 确认目标字段都存在后再输出 if (isset($treeItem['Tree2']['Field1'], $treeItem['Tree2']['Field2'], $treeItem['Tree2']['Field3'])) { echo $treeItem['Tree2']['Field1'] . '<br>'; echo $treeItem['Tree2']['Field2'] . '<br>'; echo $treeItem['Tree2']['Field3'] . '<br>'; echo '<hr>'; } } } }
原理说明
- 外层
foreach ($events as $event)负责遍历$events数组里的每一个顶级元素; - 新增的内层
foreach ($event['d']['Tree1'] as $treeItem)则遍历每个$event下Tree1数组的所有子元素,这样就能把所有Field1/Field2/Field3的内容都输出出来了。
内容的提问来源于stack exchange,提问作者user9457408
相关产品推荐
相关产品推荐

