数组中搜索



假设我有以下数组:

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;
}

您可以使用散列表。哈希的每个位置都是一个键的链表,这些键被哈希到该项。这也会让你的搜索在恒定的时间内运行!

相关内容

  • 没有找到相关文章

最新更新