Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert a PHP object to an associative array

Tags:

arrays

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.

like image 247
Haroldo Avatar asked Dec 03 '10 12:12

Haroldo


People also ask

How do you change an object to an array in PHP?

PHP program to convert an object to an array using the typecasting method. $arr = (array)$dis; echo "Items after conversion : "; var_dump($arr);

How do I get associative array in PHP?

Answer: Use the PHP array_values() function You can use the PHP array_values() function to get all the values of an associative array.

What array will you get if you convert an object to an array in PHP?

If an object is converted to an array, the result is an array whose elements are the object's properties.

How do you turn an object into an array?

To convert an object to an array you use one of three methods: Object. keys() , Object. values() , and Object. entries() .


2 Answers

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); 
like image 44
Jeff Standen Avatar answered Oct 05 '22 07:10

Jeff Standen


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:

  • Fast PHP Object to Array conversion
like image 161
Gordon Avatar answered Oct 05 '22 06:10

Gordon