如何将对象及其所有属性转换为数组


How to convert object and all of it's properties to array?

例如,如果我有一个对象,它的属性是一个包含两个对象的数组我尝试这样做

return (array) $object;

$object变成一个包含两个对象的数组。是否有一种简单的方法可以将对象及其所有嵌套对象转换为数组,而无需逐个转换?

如果你不确定,如果对象有另一个对象,那么首先尝试将对象转换为数组使用for循环检查元素是对象,然后重复这个过程,直到元素不是对象。查看下面的代码:

function toArray($obj)
{
    if (is_object($obj)) 
        $obj = (array)$obj;
    if (is_array($obj)) {
        $new = array();
        foreach ($obj as $key => $val) {
            $new[$key] = toArray($val);
        }
    } else {
        $new = $obj;
    }
    return $new;
}

简单的递归函数

 function objtoarr ($vars) {
     if (is_object($vars)) {
        $d = get_object_vars($vars);
     }
     return is_array($vars) ? array_map('objtoarr', $vars) : $vars;
 }
工作小提琴