php stdClass to array

匿名 (未验证) 提交于 2019-12-03 01:06:02

问题:

I have a problem to convert an object stdClass to array. I have tried in this way:

return (array) $booking; 

or

return (array) json_decode($booking,true); 

or

return (array) json_decode($booking); 

The array before the cast is full with one record, after my try to cast it is empty. How to cast / convert it without delete its rows?

array before cast:

array(1) {   [0]=>   object(stdClass)#23 (36) {     ["id"]=>     string(1) "2"     ["name"]=>     string(0) ""     ["code"]=>     string(5) "56/13"   } }  

after cast is empty NULL if I try to make a var_dump($booking);

I have also tried this function but always empty:

public function objectToArray($d) {         if (is_object($d)) {             // Gets the properties of the given object             // with get_object_vars function             $d = get_object_vars($d);         }          if (is_array($d)) {             /*             * Return array converted to object             * Using __FUNCTION__ (Magic constant)             * for recursive call             */             return array_map(__FUNCTION__, $d);         }         else {             // Return array             return $d;         }     } 

回答1:

The lazy one-liner method

You can do this in a one liner using the JSON methods if you're willing to lose a tiny bit of performance (though some have reported it being faster than iterating through the objects recursively - most likely because PHP is slow at calling functions). "But I already did this" you say. Not exactly - you used json_decode on the array, but you need to encode it with json_encode first.

Requirements

The json_encode and json_decode methods. These are automatically bundled in PHP 5.2.0 and up. If you use any older version there's also a PECL library (that said, in that case you should really update your PHP installation. Support for 5.1 stopped in 2006.)


Converting an array/stdClass -> stdClass

$stdClass = json_decode(json_encode($booking)); 

Converting an array/stdClass -> array

The manual specifies the second argument of json_decode as:

assoc
When TRUE, returned objects will be converted into associative arrays.

Hence the following line will convert your entire object into an array:

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


回答2:

use this function to get a standard array back of the type you are after...

return get_object_vars($booking); 


回答3:

Since it's an array before you cast it, casting it makes no sense.

You may want a recursive cast, which would look something like this:

function arrayCastRecursive($array) {     if (is_array($array)) {         foreach ($array as $key => $value) {             if (is_array($value)) {                 $array[$key] = arrayCastRecursive($value);             }             if ($value instanceof stdClass) {                 $array[$key] = arrayCastRecursive((array)$value);             }         }     }     if ($array instanceof stdClass) {         return arrayCastRecursive((array)$array);     }     return $array; } 

Usage:

$obj = new stdClass; $obj->aaa = 'asdf'; $obj->bbb = 'adsf43'; $arr = array('asdf', array($obj, 3));  var_dump($arr); $arr = arrayCastRecursive($arr); var_dump($arr); 

Result before:

array     0 => string 'asdf' (length = 4)   1 =>      array         0 =>         object(stdClass)[1]           public 'aaa' => string 'asdf' (length = 4)           public 'bbb' => string 'adsf43' (length = 6)       1 => int 3 

Result after:

array     0 => string 'asdf' (length = 4)   1 =>      array         0 =>         array           'aaa' => string 'asdf' (length = 4)           'bbb' => string 'adsf43' (length = 6)       1 => int 3 

Note:

Tested and working with complex arrays where a stdClass object can contain other stdClass objects.



回答4:

This function worked for me:

function cvf_convert_object_to_array($data) {      if (is_object($data)) {         $data = get_object_vars($data);     }      if (is_array($data)) {         return array_map(__FUNCTION__, $data);     }     else {         return $data;     } } 

Reference: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/



回答5:

Please use following php function to convert php stdClass to array

get_object_vars($data) 


回答6:

Just googled it, and found here a handy function that is useful for converting stdClass object to array recursively.

EDIT: I updated this answer with content from linked source (which is also changed now), thanks to mason81 for suggesting me.



回答7:

Here is a version of Carlo's answer that can be used in a class:

class Formatter {     public function objectToArray($data)     {         if (is_object($data)) {             $data = get_object_vars($data);         }          if (is_array($data)) {             return array_map(array($this, 'objectToArray'), $data);         }          return $data;     } } 


回答8:

The following code will read all emails & print the Subject, Body & Date.

$objectOverview: '; print_r($objectOverview); print '
objectSubject ='.($objectOverview[0]->subject)); print '
objectDate ='.($objectOverview[0]->date); $bodyMessage=imap_fetchbody($imap,$count,1); print '
bodyMessage ='.$bodyMessage.'

'; } //for ($count=1; $count

This outputs the following:

$objectOverview: Array ( [0] => stdClass Object ( [subject] => Hello [from] => Email Address [to] => Email Address [date] => Sun, 16 Jul 2017 20:23:18 +0100 [message_id] =>  [size] => 741 [uid] => 2 [msgno] => 2 [recent] => 0 [flagged] => 0  [answered] => 0 [deleted] => 0 [seen] => 1 [draft] => 0 [udate] => 1500232998 ) ) objectSubject =Hello objectDate =Sun, 16 Jul 2017 20:23:18 +0100 bodyMessage =Test  

Having struggled with various suggestions I have used trial & error to come up with this solution. Hope it helps.



文章来源: php stdClass to array
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!