PHP递归地将ArrayObject转换为关联数组
嘿,伙计们,我有一个方法,应该回调并递归地将PHP递归地将ArrayObject转换为关联数组,php,oop,recursion,callback,arrayobject,Php,Oop,Recursion,Callback,Arrayobject,嘿,伙计们,我有一个方法,应该回调并递归地将Arrayobject转换为关联数组,不幸的是,我得到了一个致命错误 PHP Fatal error: Call to undefined method ArrayObject::toArray() 这是我的方法 /** * Take an ArrayObject and recursively turn it into an array * * @param bool $recursion * * @return array */
Arrayobject
转换为关联数组,不幸的是,我得到了一个致命错误
PHP Fatal error: Call to undefined method ArrayObject::toArray()
这是我的方法
/**
* Take an ArrayObject and recursively turn it into an array
*
* @param bool $recursion
*
* @return array
*/
public function toArray($recursion = false)
{
// just in case the object might be multidimensional
if (true === $this->object) return $this->object->getArrayCopy();
return array_map( function($item)
{
return is_object($item) ? $item->toArray(true) : $item;
}, $this->object->getArrayCopy() );
}
下面是一个示例ArrayObject
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[profile] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[list] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[location] =>
[network_name] =>
[interests] =>
[last_name] =>
[url] =>
[significant_other] =>
[network_domains] =>
[contact] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[im] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[provider] =>
)
)
[email_addresses] =>
)
)
)
)
)
)
[messages] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[list] => Array
(
[0] => foo
[1] => bar
[2] => baz
)
)
)
[groups] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
)
)
[users] => ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
)
)
)
)
这是正确的,通过将
$This
作为变量传递,我不需要担心与$This->object
冲突或范围问题
/**
* Public wrapper for Protected getArray()
*
* @return arrau
*/
public function toArray()
{
return $this->getArray($this->object);
}
/**
* Take an ArrayObject and turn it into an associative array
*
* @param ArrayObject $obj
*
* @return array
*/
protected function getArray($obj)
{
$array = array(); // noisy $array does not exist
$arrObj = is_object($obj) ? get_object_vars($obj) : $obj;
foreach ($arrObj as $key => $val) {
$val = (is_array($val) || is_object($val)) ? $this->getArray($val) : $val;
$array[$key] = $val;
}
return $array;
}
调用函数toArray函数的位置和方式。在另一个类中,我正在实例化我的解析器,解析输入,将该值赋给
$this->object
,然后运行$foo=$bar->toArray()
。实例化和使用公共方法调用的典型方式。请尝试将函数replace toArray()的名称更改为other。第二件事是,作为错误,您正在创建解析器的对象。您正在通过数组的对象调用函数。重新检查代码。创建回调的目的是使其递归,将回调的名称更改为getArrayCopy()
。使用getArrayCopy()
而不是$this->toArray()
会破坏递归功能,并且只在对象的顶层操作。不要使用getArrayCopy()名称。我是说用其他名字替换。