【发布时间】:2012-02-12 19:30:27
【问题描述】:
我有一个包含嵌套对象等的对象。可以假设嵌套的级别是无限的。
如果对象嵌套了其他对象,则子对象应存储在名为childElements 的数组属性中。
我正在使用的对象如下所示:
Object
childElements
['object1'] => object
childElements
['object11'] => object
['object2'] => object
我想使用递归获得对名为object11 的对象的引用。这是我正在使用的功能。该函数驻留在一个类中,因此在调用递归时使用$this:
public function recursiveSearch(array $childElements, $elementName){
foreach ($childElements as $key => $element) {
var_dump($key);
if (isset($element->childElements)){
return $this->recursiveSearch($element->childElements, $elementName);
}else{
if ($key == $elementName){
return $childElements[$elementName];
}
}
}
throw new Exception("$elementName could not be found.");
}
然后我像这样调用我的函数(假设该对象被称为$r):
return $this->recursiveSearch($r->childElements, 'object11');
我的代码的问题(在查看 var 转储时,该函数将继续向最里面的对象移动。但是一旦完成,它就会终止,无论它是否访问过任何其他 childElements。我相信问题是由于return $this->recursiveSearch 导致过早返回。
如何构造我的递归函数以使其正常工作?
【问题讨论】: