旧行李 2010-12-03 12:34 采纳率: 25%
浏览 527
已采纳

将 PHP 对象转换为关联数组对象

I'm integrating an API to my website which works with data stored in objects while my code is written using arrays.

I'd like a quick and dirty function to convert an object to an array.

转载于:https://stackoverflow.com/questions/4345554/convert-php-object-to-associative-array

  • 写回答

27条回答 默认 最新

  • larry*wei 2010-12-03 12:40
    关注

    Just typecast it

    $array =  (array) $yourObject;
    

    From http://www.php.net/manual/en/language.types.array.php

    If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side.

    Example: Simple Object

    $object = new StdClass;
    $object->foo = 1;
    $object->bar = 2;
    
    var_dump( (array) $object );
    

    Output:

    array(2) {
      'foo' => int(1)
      'bar' => int(2)
    } 
    

    Example: Complex Object

    class Foo
    {
        private $foo;
        protected $bar;
        public $baz;
    
        public function __construct()
        {
            $this->foo = 1;
            $this->bar = 2;
            $this->baz = new StdClass;
        }
    }
    
    var_dump( (array) new Foo );
    

    Output (with \0s edited in for clarity):

    array(3) {
      '\0Foo\0foo' => int(1)
      '\0*\0bar' => int(2)
      'baz' => class stdClass#2 (0) {}
    }
    

    Output with var_export instead of var_dump:

    array (
      '' . "\0" . 'Foo' . "\0" . 'foo' => 1,
      '' . "\0" . '*' . "\0" . 'bar' => 2,
      'baz' => 
      stdClass::__set_state(array(
      )),
    )
    

    Typecasting this way will not do deep casting of the object graph and you need to apply the null bytes (as explained in the manual quote) to access any non-public attributes. So this works best when casting StdClass objects or objects with only public properties. For quick and dirty (what you asked for) it's fine.

    Also see this in-depth blog post:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(26条)

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件