php返回的是对象怎么转化成数组_php对象转数组技巧【教程】

10次阅读

PHP 中将对象转数组有五种方法:一、强制类型转换适用于 stdClass;二、json_encode/json_decode 支持嵌套;三、get_object_vars 仅获取公共属性;四、反射递归处理私有 / 受保护属性;五、Laravel 中用 Collection::make()->toArray()。

php 返回的是对象怎么转化成数组_php 对象转数组技巧【教程】

如果您在 PHP 开发中接收到一个对象,但后续操作需要以数组形式处理,则必须将该对象转换为数组。以下是多种可行的转换方法:

一、使用强制类型转换(适用于标准对象)

对非私有属性的 stdClass 对象或简单公共属性对象,可直接使用 (array) 强制类型转换,该方式会将对象的公共属性及其值映射为关联数组 键值对

1、声明一个 stdClass 对象并赋值:
$obj = new stdClass();
$obj->name = “ 张三 ”;
$obj->age = 25;

2、执行强制类型转换:
$arr = (array)$obj;

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

3、验证结果:
var_dump($arr); // 输出:array(2) {[“name”]=> string(6) “ 张三 ” [“age”]=> int(25) }

二、使用json_encode 与json_decode 组合(支持嵌套对象)

该方法先将对象序列化为 JSON 字符串,再反序列化为关联数组,能有效处理多层嵌套对象及部分不可见属性问题,但要求对象属性可被 JSON编码

1、准备待转换对象:
$obj = new stdClass();
$obj->user = new stdClass();
$obj->user->id = 1001;

2、执行双重转换:
$arr = json_decode(json_encode($obj), true);

3、确认输出为数组:
var_dump(is_array($arr)); // 输出:bool(true)

三、使用 get_object_vars 函数(仅限公共属性)

get_object_vars()函数返回对象中所有可访问的公共属性组成的关联数组,不包含私有、受保护属性以及动态添加的不可枚举属性。

1、定义一个含公共属性的类:
class Person {public $name = “ 李四 ”; public $city = “ 北京 ”;}

2、实例化并调用函数:
$p = new Person();
$arr = get_object_vars($p);

3、检查结果:
print_r($arr); // Array ([name] => 李四 [city] => 北京 )

四、递归遍历对象属性(支持私有 / 受保护属性)

通过反射机制获取对象所有属性(包括 private 和 protected),并递归处理嵌套对象,确保完整还原结构。此方法适用于复杂对象且需保留全部字段的场景。

1、定义反射转换函数:
function object_to_array($obj) {
  $arr = [];
  $reflection = new ReflectionObject($obj);
  $properties = $reflection->getProperties();
  foreach ($properties as $prop) {
    $prop->setAccessible(true);
    $value = $prop->getValue($obj);
    if (is_object($value)) {
      $arr[$prop->getName()] = object_to_array($value);
    } else {
      $arr[$prop->getName()] = $value;
    }
  }
  return $arr;
}

2、创建测试对象:
$obj = new class {private $token = “abc123“; protected $role = “admin”; public $status = “active”; };

3、调用函数转换:
$result = object_to_array($obj);

五、使用 Laravel 集合辅助(仅限 Laravel 项目)

若项目基于 Laravel 框架,可借助 Collection 类的 toArray()方法,自动处理 Eloquent 模型及普通对象,支持递归展开且兼容日期、集合等特殊类型。

1、引入 IlluminateSupportCollection:
use IlluminateSupportCollection;

2、构造对象并包装为集合:
$obj = (object)[‘data’ => (object)[‘code’ => 200]];
$collection = Collection::make($obj);

3、调用转换方法:
$arr = $collection->toArray();

以上就是

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-14发表,共计1942字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources