2010-12-07 18 views
2

ねえ、私は、このアレイは、例えば今多次元ツリー状の配列でキーのパスを見つける

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

(実際の配列は、いくつかのレベルのディープスこととツリー構造に及ぶことができる)を有します

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

誰かが、このような再帰関数で私を助けることができる:私はキー7へのパスが、それは次のように示すことができますしたいですか?

答えて

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

終了条件:キーが存在する場合、そのキーを使用して配列を返します。 それ以外の場合は、配列内の各値を調べて配列であるかどうかを調べます。そうであれば、サブアレイ上で実行されます。結果が配列の場合は、現在のキーを戻り配列に追加して返します。ルックアップが見つからない場合は、nullを返します(戻り値のチェックに失敗します)。 – evan