2010-12-07 60 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