如何将对象转换回数组?

时间:2012-04-05 13:50:23

标签: php php-5.3 stdclass

question之后,我使用此函数将数组转换为对象,

function array_to_object($array)
{
    if(!is_array($array)) {
        return $array;
    }

    $object = new stdClass();
    foreach($array as $key => $value)
    {
        $key = (string) $key ;
        $object->$key = is_array($value) ? array_to_object($value) : $value;
    }
    return $object;
}

所以,

$obj =  array('qualitypoint', 'technologies', 'India');

结果,

stdClass Object
(
    [0] => qualitypoint
    [1] => technologies
    [2] => India
)

但现在我需要将对象转换回数组,以便我可以得到这个结果,

Array
(
    [0] => qualitypoint
    [1] => technologies
    [2] => India
)

有可能吗?

2 个答案:

答案 0 :(得分:3)

什么会好,但不会真正起作用

通常一个好的开始方法是cast the object to array

$arr = (array) $obj;
  

如果将对象转换为数组,则结果是一个数组   元素是对象的属性。键是成员变量   名称,有一些值得注意的例外:整数属性   不可访问;私有变量具有前缀的类名   变量名;受保护的变量前面有一个'*'   变量名。这些前置值在任一侧都有空字节。

不幸的是,这对您不起作用,因为属性具有“整数”名称。


上述内容的变体为get_object_vars

$arr = get_object_vars($obj);

此处的一个重点是,get_object_vars尊重可见性,这意味着会为您提供$obj的公共属性,因为您没有在其中调用它$obj的方法。

但是在这种情况下这也不起作用:get_object_vars也不会给你整数命名的属性。

什么会起作用(但不是很好)

Iterating over an object还会为您提供可见属性(在本例中仅为public属性),但它也会处理具有整数名称的属性:

$arr = array();
foreach($obj as $k => $v) {
    $arr[$k] = $v;
}

答案 1 :(得分:2)

实现这一目标的另一种方法是:

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

当我测试时,我对无法访问的属性没有任何问题。

更新:它也适用于

$object = new stdClass();
$object->{0} = 'qualitypoint';
$object->{1} = 'technologies';
$object->{2} = 'India';