2011-09-13 204 views
0

所以說,我有以下陣列:陣列搜索

array(
    'key1'=>array(
     'key.1'=>'tester', 
     'key.2'=>'tester' 
    ), 
    'key2'=>array(
     'key.1'=>'failedtester', 
     'key.2'=>'tester' 
    ) 
) 

如何搜索該陣列,從而就回國了父鍵,一個值是基於關閉子鍵有一定的價值?
例如返回密鑰,使得key.1 == tester(這將返回key1)
返回密鑰,以便key.1 == failedtester(這將返回key2)
返回鍵,以便key.2 ==測試儀(這將返回數組(密鑰1,密鑰2)

這是可能的,而不做一個for循環

編輯:使用PHP(對不起以爲我說的PHP ,顯然不是.. #fail)

+1

什麼語言?或者它真的是語言不可知的? – xanatos

+1

猜你在使用PHP?你真的應該告訴我們你正在使用什麼語言...... – elslooo

+0

@xanatos根據用戶的標籤,看起來像[標籤:php] –

回答

0

解決方案1:兩個嵌套循環,總時間複雜度是O(N * N):

function search1($a, $key, $val) { 
    $result = array(); 
    foreach ($a as $a_key => $a_arr) { 
     foreach ($a_arr as $k => $v) { 
      if ($k == $key && $v == $val) { 
       $result[] = $a_key; 
      } 
     } 
    } 
    return $result; 
} 
$result = search1($a, "key.1", "tester"); // call 

解決方案2:內環是通過查找替代,總的複雜性是O( N *的log(n))。對於大n,這應該明顯更快:

function search2($a, $key, $val) { 
    $result = array(); 
    foreach ($a as $a_key => $a_arr) { 
     if (array_key_exists($key, $a_arr) && $a_arr[$key] == $val) { 
       $result[] = $a_key; 
     } 
    } 
    return $result; 
} 
$result = search2($a, "key.1", "tester"); // call 
0

在這裏你去:

$results = array(); 
foreach ($array as $key => $item) { 
    if ($item['key.1'] == 'tester') $results[] = $key; 
} 
+0

我正試圖找到一個不使用砍的解決方案。 –

+0

@Aram Papazian,不管怎樣,循環都會涉及。沒有內置的PHP函數可以滿足你想要的任何功能,而且你所需要的任何函數都將使用循環。 – simshaun

+0

@simshaun那是有效的。我只是試圖找出是否有辦法做到這一點沒有循環或不循環。如果不是的話,那就行了。 (我已經創建了一個循環版本,但試圖找到一個沒有循環的更高效的版本。)謝謝! –

-1

你可以使用一個哈希表散列的每個位置將是散列到這個詞鍵的鏈接列表。這窩你也可以在固定的時間內運行你的搜索!

+0

數據預先排列在數組中嗎? 您是否必須使用標準的多維數組來存儲數據,還是可以使用不同的數據結構? – richmb