php中对象转换数组与数组转换对象
封面图
•
2025-10-06
•
PHP
145
0
0
0
在 PHP 中,**对象(object)和数组(array)** 是两种不同的数据类型,但它们之间可以互相转换。以下是常见的几种方法: --- ## 一、对象转数组 ### 方法 1:使用 `(array)` 强制转换 ```php $obj = new stdClass(); $obj->name = "Alice"; $obj->age = 25; $array = (array) $obj; print_r($array); ``` **输出:** ``` Array ( [name] => Alice [age] => 25 ) ``` > 注意:`stdClass` 对象可以直接转换为数组,但如果对象是自定义类的实例,则默认只能转换其 **public 属性**。 --- ### 方法 2:使用 `get_object_vars()` ```php class User { public $name = "Bob"; protected $age = 30; private $email = "bob@example.com"; } $user = new User(); $array = get_object_vars($user); print_r($array); ``` **输出:** ``` Array ( [name] => Bob ) ``` > `get_object_vars()` 只会获取对象的 **public 属性**,不会包括 `protected` 和 `private` 的属性。 --- ### 方法 3:递归转换(包含私有/保护属性) 如果需要将对象的所有属性(包括 `protected` 和 `private`)都转换为数组,可以使用反射: ```php function objectToArray($object) { $array = []; if (is_object($object)) { $reflection = new ReflectionObject($object); $properties = $reflection->getProperties(); foreach ($properties as $property) { $property->setAccessible(true); $array[$property->getName()] = $property->getValue($object); } } return $array; } // 示例 class User { public $name = "Charlie"; protected $age = 40; private $email = "charlie@example.com"; } $user = new User(); $array = objectToArray($user); print_r($array); ``` **输出:** ``` Array ( [name] => Charlie [age] => 40 [email] => charlie@example.com ) ``` --- ## 二、数组转对象 ### 方法 1:使用 `(object)` 强制转换 ```php $array = [ 'name' => 'David', 'age' => 35 ]; $obj = (object) $array; print_r($obj); ``` **输出:** ``` stdClass Object ( [name] => David [age] => 35 ) ``` --- ### 方法 2:使用 `json_encode` 和 `json_decode` ```php $array = [ 'name' => 'Eve', 'age' => 28 ]; $obj = json_decode(json_encode($array)); print_r($obj); ``` **输出:** ``` stdClass Object ( [name] => Eve [age] => 28 ) ``` > 这种方式适用于嵌套数组或复杂结构。 --- ### 方法 3:自定义对象转换(如 `stdClass` 或其他类) 如果你希望将数组转换为一个特定类的对象,可以这样做: ```php class User { public $name; public $age; } $array = ['name' => 'Frank', 'age' => 29]; $obj = (object) $array; // 如果你想让 obj 是 User 类的实例 $obj = new User(); foreach ($array as $key => $value) { $obj->$key = $value; } print_r($obj); ``` **输出:** ``` User Object ( [name] => Frank [age] => 29 ) ``` --- ## 三、总结 | 转换方式 | 对象 → 数组 | 数组 → 对象 | |----------|-------------|-------------| | `(array)` / `(object)` | ✅ | ✅ | | `get_object_vars()` | ✅ | ❌ | | `json_encode` + `json_decode` | ✅ | ✅ | | 自定义类转换 | ✅ | ✅ | --- 如果你有具体场景(比如处理嵌套数组、自定义类等),欢迎告诉我,我可以提供更详细的解决方案!
上一篇:
php连接redis出现Redis server went away
下一篇:
PHP函数补完:session_id()
标题录入,一次不能超过6条
返回顶部
留言
留言
评论