如何将对象转换为数组?

php
2022-08-30 06:21:44
<?php
   print_r($response->response->docs);
?>

输出以下内容:

    Array 
(
    [0] => Object 
            (
                [_fields:private] => Array 
                                    (
                                        [id]=>9093 
                                        [name]=>zahir
                                    ) 
            Object 
            ( 
                [_fields:private] => Array 
                                    (
                                        [id]=>9094 
                                        [name]=>hussain
                                    )..
            )
)

如何将此对象转换为数组?我想输出以下内容:

Array
(
    [0]=>
    (
        [id]=>9093 
        [name]=>zahir
    ) 
    [1]=>
    (
        [id]=>9094 
        [name]=>hussain
    )...
)

这可能吗?


答案 1

一维数组

要转换单维数组,您可以使用或有get_object_vars进行转换,Benoit在他的答案中提到了这一点。(array)

// Cast to an array
$array = (array) $object;
// get_object_vars
$array = get_object_vars($object);

它们的工作方式彼此略有不同。例如,将返回一个仅具有可公开访问属性的数组,除非它是从要传递的对象的范围内(即在对象的成员函数中)调用的。另一方面,将强制转换为阵列,其中所有公共,私有和受保护成员在阵列上保持不变,尽管现在当然都是公开的。get_object_vars(array)

多维数组

一个有点肮脏的方法是使用PHP >= 5.2的本机JSON函数编码为JSON,然后解码回数组。但是,这将不包括私有成员和受保护成员,并且不适用于包含无法进行 JSON 编码的数据(如二进制数据)的对象。

// The second parameter of json_decode forces parsing into an associative array
$array = json_decode(json_encode($object), true);

或者,以下函数将从对象转换为包含私有和受保护成员的数组,这些成员从此处获取并修改为使用强制转换:

function objectToArray ($object) {
    if(!is_object($object) && !is_array($object))
        return $object;

    return array_map('objectToArray', (array) $object);
}

答案 2

您应该查看get_object_vars,因为您的属性被声明为私有,您应该在类中调用它并返回其结果。

要小心,对于像字符串这样的基元数据类型,它会很好地工作,但我不知道它在嵌套对象中的行为。

在你的情况下,你必须做这样的事情;

<?php
   print_r(get_object_vars($response->response->docs));
?>

推荐