<?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
    )...
)

这可能吗?


当前回答

我有同样的问题,我解决了上面提到的get_object_vars。

此外,我必须使用json_decode转换我的对象,并且必须使用老式的“for”循环(而不是for-each)迭代数组。

其他回答

简单的版本:

$arrayObject = new ArrayObject($object);
$array = $arrayObject->getArrayCopy();

更新的递归版本:

class RecursiveArrayObject extends ArrayObject
{
    function getArrayCopy()
    {
        $resultArray = parent::getArrayCopy();
        foreach($resultArray as $key => $val) {
            if (!is_object($val)) {
                continue;
            }
            $o = new RecursiveArrayObject($val);
            $resultArray[$key] = $o->getArrayCopy();
        }
        return $resultArray;
    }
}

$arrayObject = new RecursiveArrayObject($object);
$array = $arrayObject->getArrayCopy();

我有同样的问题,我解决了上面提到的get_object_vars。

此外,我必须使用json_decode转换我的对象,并且必须使用老式的“for”循环(而不是for-each)迭代数组。

一维数组

对于转换一维数组,您可以使用(array)或get_object_vars进行强制转换,这是Benoit在 他的回答。

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

它们的工作原理略有不同。例如,get_object_vars将返回一个只有公共可访问属性的数组,除非它是从您传递的对象范围内调用的(即在对象的成员函数中)。(array),另一方面,将强制转换为一个数组,数组中所有public, private和protected成员都完好无损,当然,现在都是public。

多维数组

一个有点脏的方法是使用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);
}

试试这个:

 <?php
  print_r(json_decode(json_encode($response->response->docs),true));
 ?>
$array = json_decode(json_encode($object), true);

我尝试了几种方法来做一个对象的foreach,这真的是我所见过的最简单和最酷的方法。只有一行:)