全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php把对象转成数组_php对象数组转换操作技巧【教程】

PHP对象转数组有五种方法:一、(array)强制转换,保留私有/受保护属性前缀;二、get_object_vars()仅提取public属性;三、json_encode/json_decode组合,丢失类型但处理嵌套;四、递归函数统一降级;五、自定义toArray()方法最可控。

如果您需要将 PHP 中的对象转换为数组,以便进行数据处理、序列化或与数组操作函数兼容,则需根据对象类型选择合适的方法。以下是多种实现方式:

一、使用类型转换强制转为数组

对标准类(stdClass)实例或未重载数组访问的普通对象,可直接使用 (array) 强制类型转换。该操作会将对象的公共属性转为关联数组键值对,私有和受保护属性键名将被添加特定前缀修饰。

1、定义一个包含 public 属性的类实例。

2、使用 $arr = (array) $obj; 将对象赋值给新变量。

3、访问 $arr['property_name'] 获取对应属性值。

4、注意:受保护属性在转换后键名为 "\0*\0property_name",私有属性为 "\0ClassName\0property_name",需按此格式读取。

二、使用 get_object_vars() 函数

该函数仅返回对象中所有可访问(public)属性组成的关联数组,不包含私有或受保护成员,也不触发 __get 魔术方法,适用于快速提取公开字段。

1、确保目标对象已实例化且至少含有 public 属性。

2、调用 $arr = get_object_vars($obj); 获取数组结果。

3、检查返回值是否为 array 类型,空对象将返回空数组。

4、注意:若对象是 stdClass 实例且动态添加了属性,该函数仍可完整捕获;但对实现了 ArrayAccess 或 __get 的对象,不会调用魔术方法,仅返回实际存在的 public 属性

三、使用 JSON 编码解码组合法

通过 json_encode() 将对象转为 JSON 字符串,再用 json_decode($json, true) 强制解析为关联数组。该方法能穿透部分嵌套对象,且自动忽略不可序列化的资源或闭包。

1、确认对象所有属性均可被 JSON 序列化(不包含 resource、Closure 等)。

2、执行 $json = json_encode($obj); 将对象编码为字符串。

3、执行 $arr = json_decode($json, true); 得到深度转换后的关联数组。

4、注意:对象中的 DateTime 实例会被转为 ISO8601 字符串,原始对象类型信息将完全丢失;同时,JSON 不支持 NaN、Infinity 和某些特殊 Unicode 控制字符。

四、编写递归转换函数处理嵌套对象

当对象内部包含其他对象或数组时,需递归遍历并统一转换。该方法可自定义行为,例如跳过特定属性、重命名键名或过滤 null 值。

1、定义函数 function objectToArray($obj) { if (!is_object($obj) && !is_array($obj)) return $obj; if (is_object($obj)) $obj = (array) $obj; return array_map('objectToArray', $obj); }。

2、调用 $result = objectToArray($obj); 获取完全展开的数组结构。

3、对返回结果中的每一项判断类型,继续递归直到无对象残留。

4、注意:该函数会将所有对象(包括 stdClass 和自定义类)统一降级为数组,受保护/私有属性键名仍保留 \0 前缀,需额外正则清理

五、利用 Serializable 接口配合自定义 toArray() 方法

在业务类中显式声明 toArray() 方法,明确控制哪些属性参与转换、是否格式化值、是否排除敏感字段。这是最可控、最符合领域逻辑的方式。

1、在类中定义 public function toArray() { return [ 'id' => $this->id, 'name' => $this->name, 'created_at' => $this->createdAt->format('Y-m-d H:i:s') ]; }。

2、在外部调用 $arr = $obj->toArray(); 获取定制化数组。

3、可在 toArray() 内部调用其他对象的 toArray() 实现链式转换。

4、注意:必须手动维护字段映射关系,新增属性需同步更新 toArray() 方法体;但可结合 ReflectionClass 自动发现 public 属性以减少硬编码。


# php  # js  # json  # 编码  # access  # 递归函数  # 键值对  # Array  # NULL  # Resource  # if  # 关联数组  # format  # 字符串  # 强制类型转换  # 递归  # 接口  # public  # 闭包  # 类型转换  # function  # 对象  # this  # 自定义  # 键名  # 链式  # 序列化  # 会将  # 不包含  # 类中  # 象中  # 这是 


相关文章: 建站之星安装步骤有哪些常见问题?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星如何取消后台验证码生成?  已有域名能否直接搭建网站?  如何配置WinSCP新建站点的密钥验证步骤?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何通过虚拟机搭建网站?详细步骤解析  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  个人网站制作流程图片大全,个人网站如何注销?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  制作网站的模板软件,网站怎么建设?  在线教育网站制作平台,山西立德教育官网?  宝塔建站后网页无法访问如何解决?  模具网站制作流程,如何找模具客户?  如何用PHP快速搭建CMS系统?  如何在万网主机上快速搭建网站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  制作表格网站有哪些,线上表格怎么弄?  如何在阿里云部署织梦网站?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  如何挑选高效建站主机与优质域名?  常州企业建站如何选择最佳模板?  如何快速辨别茅台真假?关键步骤解析  定制建站流程步骤详解:一站式方案设计与开发指南  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何通过VPS搭建网站快速盈利?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  建站主机选购指南与交易推荐:核心配置解析  如何通过虚拟主机快速搭建个人网站?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  如何通过智能用户系统一键生成高效建站方案?  如何在阿里云购买域名并搭建网站?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何确保FTP站点访问权限与数据传输安全?  如何快速搭建高效WAP手机网站吸引移动用户?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何高效配置香港服务器实现快速建站?  c++ stringstream用法详解_c++字符串与数字转换利器  建站之星代理费用多少?最新价格详情介绍  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  建站之星伪静态规则如何设置?  如何用PHP快速搭建高效网站?分步指南  深圳网站制作案例,网页的相关名词有哪些?  如何做静态网页,sublimetext3.0制作静态网页?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  网站制作大概多少钱一个,做一个平台网站大概多少钱?  网站制作新手教程,新手建设一个网站需要注意些什么? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。