可能重复:
convert object to array
假设我有一个这样的数组:(请注意,某些方法/对象可能受到保护,因此必须在自己的类中访问它们)
array(
0=> objectname{
[method1:protected]=> array(
["key1"] => object2{
[method2]=> array(
0 => "blah"
)
}
)
}
1=> objectname{
[method1:protected]=> array(
["key1"] => object2{
[method2]=> array(
0 => "blah"
)
}
)
}
)
我想将所有这些转换为数组。我通常会用这个:
protected function _object_to_array($obj){
if(is_object($obj)) $obj = (array) $obj;
if(is_array($obj)) {
$new = array();
foreach($obj as $key => $val) {
$new[$key] = self::_object_to_array($val);
}
}else{
$new = $obj;
}
return $new;
}
问题是这不会保留对象名称。我希望对象名称成为一个额外的键,使数组在一个维度上颠簸。例如,将object替换为0可能有效,但最好还是创建类似这样的东西:
array(
0=> array(
objectname=> array(
...blah blah
)
)
)
答案 0 :(得分:1)
想出来。
然而,新问题,受保护的方法最终成为像[* formermethodturnedkey]这样的键。他们似乎无法访问。如何访问这样的密钥?
protected function _object_to_array($obj){
//we want to preserve the object name to the array
//so we get the object name in case it is an object before we convert to an array (which we lose the object name)
$obj_name = false;
if(is_object($obj)){
$obj_name = get_class($obj);
$obj = (array) $obj;
}
//if obj is now an array, we do a recursion
//if obj is not, just return the value
if(is_array($obj)) {
$new = array();
//initiate the recursion
foreach($obj as $key => $val) {
//we don't want those * infront of our keys due to protected methods
$new[$key] = self::_object_to_array($val);
}
//now if the obj_name exists, then the new array was previously an object
//the new array that is produced at each stage should be prefixed with the object name
//so we construct an array to contain the new array with the key being the object name
if(!empty($obj_name)){
$new = array(
$obj_name => $new,
);
}
}else{
$new = $obj;
}
return $new;
}