2010-12-07 58 views
2

哎,我这个阵列(实际阵列可以是几个水平深处并跨越树结构)找到一个关键的路径在多维树状阵列

array 
    3 => 
    array 
     4 => 
     array 
      7 => null 
      8 => null 
     5 => null 
    6 => null 

现在,例如我想的路径,关键7,可以证明这样的:

array 
    0 => int 7 
    1 => int 4 
    2 => int 3 

有人可以帮助我这样的递归函数?

回答

8

这会返回你正在寻找的东西。如果找不到密钥,它将返回null。

In codepad.

function getkeypath($arr, $lookup) 
{ 
    if (array_key_exists($lookup, $arr)) 
    { 
     return array($lookup); 
    } 
    else 
    { 
     foreach ($arr as $key => $subarr) 
     { 
      if (is_array($subarr)) 
      { 
       $ret = getkeypath($subarr, $lookup); 

       if ($ret) 
       { 
        $ret[] = $key; 
        return $ret; 
       } 
      } 
     } 
    } 

    return null; 
} 
+1

结束条件:如果键存在,则返回与该键的阵列;否则它会检查数组中的每个值以查看它是否为数组。如果是这样,它就在子阵列上运行。如果结果是数组,则它将当前键附加到返回数组并返回它。如果它找不到查找,它将返回空值(这不能检查返回值)。 – evan 2010-12-07 21:24:52