我一直试图编写一个递归函数来给出给定元素的深度,但没有成功。我只是不太明白递归的含义。这就是我所拥有的,但它不能正常工作:

function getDepth($a, $e, $depth = 0) {
  foreach ($a as $key => $val) {
    if (is_array($val)) {
      if ($key == $e) {
        return $depth;
      }
      return getDepth($val, $e, $depth + 1);
    }
    else {
      if ($val == $e) {
        return $depth;
      }
      else {
        return 1;
      }
    }
  }
}

有人能帮我指出我做错了什么吗?提前谢谢你的帮助。
编辑:
@Brad@Amber@Viktor谢谢,但这也没用。这是我想要的…我有一个这样的数组:
[antonio] => Array
(
    [ian] => Array
        (
            [molly] => Array
                (
                    [blake] => blake
                )

        )

    [shonda] => Array
        (
            [dana] => dana
            [james] => james
        )

    [nels] => Array
        (
            [jason] => jason
            [danny] => danny
        )

    [molly] => Array
        (
            [blake] => blake
        )

    [blake] => blake
    [travis] => travis
)

这是一棵树,我希望能找到一个名字的深度。所以,我需要传个名字,布莱克说。然后我想遍历整棵树,随时跟踪布莱克在树上不同层次的深度(在本例中确实如此)。假设最上面的深度等级是0,那么布莱克在安东尼奥手下的等级是3,但是他在安东尼奥手下的等级是1,所以我想返回1。我必须遍历整个树(幸运的是,这个函数不会经常调用),以确保为给定的用户找到树中最浅的深度。再次感谢你的帮助。

最佳答案

基本上,为了正确地进行递归,如果你知道你的函数中有一个数组,那么在它上运行同样的函数。我们加上迄今为止最深的路径+1。最后,你得到了你想要的。

function getDepth($a) {
    $max=0;
    foreach ($a as $val) {
        if (is_array($val)) {
            $tmp_depth=getDepth($val);
            if ($max<($tmp_depth)) {
                $max=$tmp_depth;
            }
        }
    }
    return $max+1;
}

我还没有做过基准测试。毫无疑问,如果这很重要的话,速度可能会提高。

关于php - 用PHP计算关联数组中元素的深度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7718413/

10-15 19:05