PHP循环解析嵌套JSON数组的实现方法
解决PHP遍历JSON附件数组的问题
嗨,我来帮你修正这个遍历的小问题!你当前的伪代码里踩了个小坑——每次循环都硬写了[0],所以不管循环多少次,拿到的永远是第一个附件的数据。正确的做法是直接利用foreach循环里的当前元素来获取属性,不用再绕回原数组通过索引取值啦。
正确的遍历写法
首先确保你已经正确解析了JSON字符串:
// 示例JSON数据 $jsonobj = '{ "attachments": [ { "content": "<base 64 encoded attachment>", "content_type": "image/jpeg", "original_name": "image000000.jpg" }, { "content": "<base 64 encoded attachment>", "content_type": "image/gif", "original_name": "gif0001.jpg" } ], "source_number": "++614567890" }'; $arr = json_decode($jsonobj, true);
然后直接遍历attachments数组,循环变量$attachment就是当前迭代到的单个附件对象:
// 先做安全检查,避免数组不存在或格式错误导致报错 if (isset($arr['attachments']) && is_array($arr['attachments'])) { foreach ($arr['attachments'] as $attachment) { // 从当前附件元素中直接取出对应值 $contentType = $attachment['content_type']; $content = $attachment['content']; $originalName = $attachment['original_name']; // 这里可以添加你的业务逻辑,比如打印、存储附件等 echo "文件名:{$originalName},文件类型:{$contentType}\n"; } }
额外小技巧
如果你需要知道当前是第几个附件(获取索引),可以把foreach改成带索引的写法:
foreach ($arr['attachments'] as $index => $attachment) { echo "第{$index+1}个附件:{$attachment['original_name']}\n"; }
另外,开头的isset($arr['attachments']) && is_array($arr['attachments'])是个好习惯——可以防止JSON里没有attachments字段,或者它不是数组的情况,避免代码抛出错误,让程序更健壮。
内容的提问来源于stack exchange,提问作者user982124




