递归 - 查找具有最多子项的元素

时间:2012-08-23 07:40:12

标签: php recursion

我有一个PHP对象(或者它可能是一个数组),我想以递归方式遍历其元素及其所有子元素,并找出哪个元素具有最多的子元素。

这就是我所做的。

var $max_element = array();

$this->find_longest_element_recursively($data, 0, array());

public function find_longest_element_recursively($object, $index, $max_array) {

  if(!is_array((array) $object) || is_string($object) || is_numeric($object) || is_bool($object)) {

  } else {
    foreach($object as $key => $element) {
      if(sizeof((array) $element) > sizeof((array) $this->max_array)) {
        $this->max_array = $element;
      }
      $this->find_longest_element_recursively($element, $index+1, $max_array);
    }
  }     
}

确定。所以这适合我。但我不认为这是进行递归的正确方法。我想我可以摆脱$ max_element变量并返回实际的max_element对象作为递归函数的结果,但不确定如何在递归期间跟踪max_element对象。喜欢听你的想法。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你可以将它括在一个类中:

class MaxFinder {

    var $max_element = array();
    function MaxFinder() {
    }

    public function find_longest_element_recursively($object, $index, $max_array) {

      if(!is_array((array) $object) || is_string($object) || is_numeric($object) || is_bool($object)) {

      } else {
        foreach($object as $key => $element) {
          if(sizeof((array) $element) > sizeof((array) $this->max_array)) {
            $this->max_array = $element;
          }
          $this->find_longest_element_recursively($element, $index+1, $max_array);
        }
      }     
     }

     public get_longest_element($object, $index, $max_array) {
          $this->find_longest_element_recursively($object, $index, $max_array);
          return $this->max_element;
     }
}

这将为您提供一次只调用计算而不会使您的变量空间混乱:

 $result = (new MaxFinder()).get_longest_element_recursively($data, 0, array());

当然你也可以为你做一个静态函数instanciation和get _...调用。