Convert a PHP object to an associative array Convert a PHP object to an associative array php php

Convert a PHP object to an associative array


Just typecast it

$array = (array) $yourObject;

From Arrays:

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:


You can quickly convert deeply nested objects to associative arrays by relying on the behavior of the JSON encode/decode functions:

$array = json_decode(json_encode($nested_object), true);


From the first Google hit for "PHP object to assoc array" we have this:

function object_to_array($data){    if (is_array($data) || is_object($data))    {        $result = [];        foreach ($data as $key => $value)        {            $result[$key] = (is_array($data) || is_object($data)) ? object_to_array($value) : $value;        }        return $result;    }    return $data;}

The source is at codesnippets.joyent.com.


To compare it to the solution of json_decode & json_encode, this one seems faster. Here is a random benchmark (using the simple time measuring):

$obj = (object) [    'name'    =>'Mike',    'surname' =>'Jovanson',    'age'     =>'45',    'time'    =>1234567890,    'country' =>'Germany',];##### 100 000 cycles ######* json_decode(json_encode($var))   : 4.15 sec* object_to_array($var)            : 0.93 sec