2011-09-13 160 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