PHP对象转数组有五种方法:一、json_decode($json, true)直接解析JSON为关联数组;二、get_object_vars()提取公有属性;三、(array)强制转换,注意私有属性键名含不可见字符;四、递归函数object_to_array处理嵌套结构;五、Serializable接口配合json_encode/json_decode间接转换。

如果需要将 PHP 对象转换为数组,尤其是处理从 JSON 解析得到的对象时,存在多种直接且可靠的方法。以下是实现该转换的具体步骤:
当原始数据是 JSON 字符串时,可在调用 json_decode 时传入第二个参数 true,强制返回关联数组而非 stdClass 对象。此方法适用于已知输入为合法 JSON 字符串的场景。
1、定义一个包含对象结构的 JSON 字符串,例如 $json = '{"name":"Alice","age":30}';
2、调用 $arr = json_decode($json, true);
立即学习“PHP免费学习笔记(深入)”;
3、此时 $arr 是一个普通 PHP 关联数组,可通过 $arr['name'] 直接访问值。
4、若原 JSON 中嵌套了对象或数组,所有层级均会递归转为数组结构,无需额外遍历或类型判断。
该函数仅返回对象的可访问(public)属性组成的关联数组,不处理私有或受保护属性,也不递归解析嵌套对象。
1、声明一个类并实例化,例如 class Person { public $name = 'Bob'; public $city = 'Shanghai'; }
2、创建对象 $obj = new Person();
3、调用 $arr = get_object_vars($obj);
4、结果为 ['name' => 'Bob', 'city' => 'Shanghai'],私有属性和方法不会出现在返回数组中。
PHP 支持将对象强制转为数组,但仅适用于具有 public 属性的对象,且键名前会附加类名与不可见字符,格式为 "\0ClassName\0PropertyName"。
1、定义一个含 public 属性的对象 $obj = new stdClass(); $obj->id = 123; $obj->title = 'Test';
2、执行 $arr = (array) $obj;
3、检查 $arr 键名,可见其保持为 'id' 和 'title',因 stdClass 无命名空间修饰。
4、若对象来自自定义类且含 private 属性,对应键名将包含不可见字符,需用 var_dump 查看真实结构。
当对象内含嵌套对象、数组或其他复杂结构,且需统一转为纯数组时,可编写递归函数逐层处理。
1、定义函数 function object_to_array($obj) { if (is_object($obj)) $obj = (array) $obj; if (is_array($obj)) { $new = array(); foreach ($obj as $key => $val) $new[$key] = object_to_array($val); return $new; } else return $obj; }
2、传入任意深度嵌套的对象 $result = object_to_array($complexObj);
3、函数自动识别每个值类型,对子对象继续调用自身,确保最终结果不含任何对象实例。
对于实现了 Serializable 接口的类,可通过序列化后再解析的方式间接获得数组结构,前提是类中 serialize 方法返回的是可被 json_decode 处理的数据格式。
1、在类中实现 serialize() 方法,返回一个关联数组或 JSON 兼容结构。
2、调用 $serialized = serialize($obj);
3、再通过 $arr = json_decode(json_encode(unserialize($serialized)), true);
4、该方式绕过对象属性可见性限制,但要求类主动支持且返回结构清晰。
以上就是php的对象怎么转换成为数组_php对象转数组json_decode加true法【教程】的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号