php stdClass to array

2022-08-30 06:12:07

我有一个问题,将对象stdClass转换为数组。我尝试过这样:

return (array) $booking;

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

return (array) json_decode($booking);

强制转换之前的数组已满一条记录,在我尝试转换后,它是空的。如何在不删除其行的情况下投射/转换它?

转换前的数组:

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

在 cast 是空的 NULL 之后,如果我尝试使var_dump($booking);

我也尝试过这个函数,但总是空的:

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

懒惰的单行方法

如果您愿意损失一点点性能,则可以使用JSON方法在一个衬里中执行此操作(尽管有些人报告说它比递归迭代对象更快 - 很可能是因为PHP在调用函数方面很慢)。“但我已经这样做了”,你说。不完全是 - 您在数组上使用了json_decode,但您需要先使用json_encode对其进行编码。

要求

json_encodejson_decode方法。这些会自动捆绑在 PHP 5.2.0 及更高版本中。如果您使用任何旧版本,还有一个PECL库(也就是说,在这种情况下,您应该真正更新PHP安装。对 5.1 的支持已于 2006 年停止。


转换array/stdClass -> stdClass

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

转换array/stdClass -> array

手册将json_decode的第二个参数指定为:

assoc
TRUE 时,返回的对象将转换为关联数组。

因此,以下行将整个对象转换为数组:

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

答案 2

使用此函数来获取您所追求类型的标准数组...

return get_object_vars($booking);