2012-06-11 24 views
0

我有一個函數PHP OOP多維數組的搜索問題

function GetArrKey($findArr, $key_arr, $depth=0) 
{ 
    if(count($key_arr) <= $depth || !array_key_exists($key_arr[$depth], $findArr)) 
    return NULL; 
    else if(count($key_arr) == $depth+1) 
    return $findArr[$key_arr[$depth]]; 

    return self::GetArrKey($findArr[$key_arr[$depth]], $key_arr, $depth+1); 
} 

,搜索一個數組,並返回匹配什麼,我需要數組的一部分。

唯一的問題是它似乎返回完全相同的值。例如,我有一個foreach循環

foreach($e as $k => $v) { 
    $value = GetArrayKey(array,$k); 
    print_r($value); 
} 

這個功能和它的打印(每次但是$ K表我使用的搜索是不同的)的值完全相同的5倍。

我假設這是因爲返回self :: GetArrKey,但我似乎無法修復它。

例子...

tweet-19486731414564564 
Tweet 1 
tweet-19486778435455556 
Tweet 1 
tweet-19703966855465458 
Tweet 1 
tweet-19842914654654650 
Tweet 1 

但它應該做的

tweet-19486731414564564 
Tweet 1 
tweet-19486778435455556 
Tweet 2 
tweet-19703966855465458 
Tweet 3 
tweet-19842914654654650 
Tweet 4 
+1

您是否有一些示例輸入? –

+0

你需要什麼?我添加了一些示例輸出。 – Steven

+1

我沒有跟隨你的例子。是樣本輸出還是樣本輸入? 'array'看起來像你放進GetArrayKey的東西嗎? '$ e'看起來像什麼?這對於能夠複製您的問題很有用。 –

回答

0

我相信你的問題是在你的遞歸函數的最後一行:

return self::GetArrKey($findArr[$key_arr[$depth]], $key_arr, $depth+1); 

這意味着,該函數將被再次調用,直到您遇到基本情況。基本情況將返回,並且此功能不會修改該情況。因此,對遞歸函數的所有調用都只會返回基本情況的結果,在這種情況下,這不是您想要的結果,因爲您正在查找響應而不是遞歸執行某些函數。