在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
)
有可能吗?
答案 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';