对象到数组转换作为单独的函数而不是作为对象方法

时间:2012-08-04 11:37:39

标签: php arrays recursion map

我json解码了API的json数据,并希望将对象转换为数组。我写了一个类函数来做到这一点。而这个功能是

public function objectToArray($result) {
    if (is_object($result)) {
        $result = get_object_vars($result);
    }
    if (is_array($result)) {
        return array_map( @$this->objectToArray, $result);
    }
    else {
        // Return array
        return $result;    
    }
} 

所以上面的代码没有用。它只转换了“第一层”对象,但没有转换对象数组的对象(我说的是嵌套数组和对象)。 但是当我在类外声明像函数objectToArray并将array_map的参数更改为'objectToArry'时,它突然开始工作了。怎么会 ?在PHP中的类中是否存在recurive函数的问题?

3 个答案:

答案 0 :(得分:2)

出了什么问题:

json_decode($input,true);

答案 1 :(得分:0)

在PHP中,$this->objectToArray是对该名称的属性的引用,而不是对您所期望的函数的引用。您需要使用对象实例和方法名称传递数组:

return array_map(array($this, 'objectToArray'), $result);

答案 2 :(得分:0)

如果要将对象的方法用作回调,则必须传递数组:

array_map(array($this, 'objectToArray'), $result);

PHP可能会告诉您,如果您没有使用@运算符来抑制错误。