php中将对象转数组有四种方法:一、json_encode与json_decode(true)组合;二、强制类型转换(Array);三、get_Object_vars提取public属性;四、递归处理嵌套对象。

如果您在php开发中需要将对象转换为数组,以便于数据处理或序列化操作,则可能遇到对象属性不可直接访问或JSON解析后仍为对象的问题。以下是解决此问题的步骤:
一、使用json_encode与json_decode组合转换
该方法先将对象序列化为JSON字符串,再通过json_decode的第二个参数设置为true,强制返回关联数组而非对象。这是最常用且兼容性良好的方式。
1、调用json_encode函数,传入原始对象,获取JSON格式字符串。
2、将上一步得到的JSON字符串作为参数传入json_decode函数。
立即学习“PHP免费学习笔记(深入)”;
3、在json_decode函数中,第二个参数明确传入true,确保返回结果为索引/关联数组而非stdClass对象。
二、使用类型转换(强制数组转换)
PHP支持对部分对象进行强制类型转换为数组,但仅适用于未定义__toString或__set_state等魔术方法的简单对象,且要求所有属性为public。
1、在对象变量前添加(array)类型声明。
2、执行转换后,对象的public属性会成为数组的键值对,private和protected属性则以特殊命名格式(如“ 类名 属性名”)存在。
3、若需清理私有属性键名,可配合array_keys与preg_replace对键进行正则过滤。
三、使用get_object_vars函数提取公有属性
get_object_vars函数仅返回对象中可访问的public属性组成的关联数组,不包含private或protected成员,适合对属性可见性有明确控制的场景。
1、调用get_object_vars函数,传入目标对象实例。
2、函数返回一个以属性名为键、属性值为值的关联数组。
3、若对象继承自父类且需包含父类public属性,该函数仍可正常获取,无需额外操作。
四、实现递归转换以支持嵌套对象
当对象内部含有其他对象(如属性值本身是对象或对象数组)时,前述方法可能仅转换顶层结构。此时需编写递归函数逐层处理。
1、定义一个接收任意类型变量的函数,判断是否为object。
2、若为object,则先用get_object_vars获取其public属性,再对每个属性值递归调用自身。
3、若属性值为数组,则遍历数组元素,对其中每个元素再次递归判断并转换。
4、所有非object非array类型保持原值不变,直接赋值到结果数组对应位置。