假设我有以下数组:
array(
'key1'=>array(
'key.1'=>'tester',
'key.2'=>'tester'
),
'key2'=>array(
'key.1'=>'failedtester',
'key.2'=>'tester'
)
)
我如何搜索这个数组,这样我返回父键,这样一个值是基于子键的某个值?
归还钥匙,比如那把钥匙。1 == tester(这将返回key1)
归还钥匙,比如那把钥匙。1 == failedtester(这将返回key2)
归还钥匙,比如那把钥匙。2 == tester(这将返回数组(key1, key2)
不使用for循环是否可行?
编辑:使用PHP(抱歉,我以为我说的是PHP,显然不是…#失败)
方案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
给你:
$results = array();
foreach ($array as $key => $item) {
if ($item['key.1'] == 'tester') $results[] = $key;
}
您可以使用散列表。哈希的每个位置都是一个键的链表,这些键被哈希到该项。这也会让你的搜索在恒定的时间内运行!