1

在这个问题之后,我使用这个函数将数组转换为对象,

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
)

是否可以?

4

2 回答 2

3

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

通常一个好的开始方法是简单地将对象转换为数组

$arr = (array) $obj;

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

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


上面的一个变体是get_object_vars

$arr = get_object_vars($obj);

这里重要的一点是get_object_vars尊重可见性,这意味着它只会为您提供公共属性,$obj因为您不是从$obj.

但是,这在这种情况下也不起作用:get_object_vars也不会为您提供整数命名的属性。

什么会起作用(但不好)

迭代一个对象也会给你它具有的可见属性(在这种情况下只有public属性),但它也会处理具有整数名称的属性:

$arr = array();
foreach($obj as $k => $v) {
    $arr[$k] = $v;
}
于 2012-04-05T13:51:50.933 回答
2

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

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

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

更新:它也适用于

$object = new stdClass();
$object->{0} = 'qualitypoint';
$object->{1} = 'technologies';
$object->{2} = 'India';
于 2012-04-05T14:01:14.933 回答