如何在 PHP 中正确遍历 JSON 解码后的对象属性数组

发布时间 - 2026-01-05 00:00:00    点击率:

当使用 `json_decode()` 将 json 字符串转为 php 对象后,需明确目标数据位于对象的哪个属性下;本例中待遍历的是 `$topic_obj->text` 这一数组属性,而非整个对象本身。

在 PHP 中,json_decode($json, $assoc = false) 默认返回一个 stdClass 对象,其结构严格对应原始 JSON。这意味着:

  • 顶层 JSON 对象 → PHP 的 stdClass 实例(如 $Topic_OBJ);
  • JSON 数组(如 "Text": [...])→ PHP 索引数组,作为该对象的一个属性存在,必须通过 ->Text 显式访问;
  • 直接 foreach ($Topic_OBJ as ...) 会遍历对象的公共属性(即 "TextContainer_id" 和 "Text" 两个属性),而 $obj->Text->Text_id 会失败,因为 $obj 实际是字符串键(如 "TextContainer_id")或数组("Text"),并非嵌套对象。

✅ 正确做法是:定位到目标数组属性,再对其迭代:

$Topic_OBJ = json_decode($this->api_local_get($url));
$Text_IDS = "";

// ✅ 正确:遍历 $Topic_OBJ 对象的 Text 属性(它是一个数组)
foreach ($Topic_OBJ->Text as $text) {
    $Text_IDS .= $text->Text_id . ',';
}

// 输出示例:'794887707,794887711,'

⚠️ 注意事项:

  • 在访问前建议校验属性是否存在且为数组,避免运行时错误:
    if (isset($Topic_OBJ->Text) && is_array($Topic_OBJ->Text)) {
        foreach ($Topic_OBJ->Text as $text) {
            if (isset($text->Text_id)) {
                $Text_IDS .= $text->Text_id . ',';
            }
        }
    }
  • 若需去除末尾多余逗号,可用 rtrim($Text_IDS, ',');
  • 如需更现代、安全的写法,可结合 array_column() 和 implode():
    $textIds = array_column((array)$Topic_OBJ->Text, 'Text_id');
    $Text_IDS = implode(',', $textIds) . ',';

总结:foreach 作用于对象本身 ≠ 遍历其内部数组属性;务必通过 ->属性名 明确路径访问嵌套结构。这是 JSON 解析后对象遍历中最常见的误区之一。

立即学习“PHP免费学习笔记(深入)”;


# php  # js  # json  # ai  # foreach  # 字符串  # 对象  # 遍历  # 的是  # 这是  # 这一  # 它是  # 而非  # 如需  # 最常见  # 是否存在  # 为该 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何确认建站备案号应放置的具体位置?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何快速生成凡客建站的专业级图册?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何实现多对多模型关联?(Eloquent教程)  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  iOS验证手机号的正则表达式  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何在香港服务器上快速搭建免备案网站?  如何在橙子建站上传落地页?操作指南详解  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  七夕网站制作视频,七夕大促活动怎么报名?  Laravel如何使用Sanctum进行API认证?(SPA实战)  个人摄影网站制作流程,摄影爱好者都去什么网站?  IOS倒计时设置UIButton标题title的抖动问题  javascript如何操作浏览器历史记录_怎样实现无刷新导航  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  javascript基本数据类型及类型检测常用方法小结  浅述节点的创建及常见功能的实现  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  进行网站优化必须要坚持的四大原则  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  浅析上传头像示例及其注意事项  使用spring连接及操作mongodb3.0实例  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  JavaScript常见的五种数组去重的方式  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel如何升级到最新版本?(升级指南和步骤)  如何快速辨别茅台真假?关键步骤解析  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  详解vue.js组件化开发实践  🚀拖拽式CMS建站能否实现高效与个性化并存?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel如何创建自定义Facades?(详细步骤)  详解Oracle修改字段类型方法总结  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何处理异常和错误?(Handler示例)  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  如何快速查询域名建站关键信息?  Android仿QQ列表左滑删除操作