数组搜索

时间:2011-09-13 18:42:56

标签: php arrays search multidimensional-array

所以说我有以下数组:

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 == tester(这将返回数组(key1,key2)

这可能没有做for循环吗?

编辑:使用PHP(抱歉以为我说过PHP,显然不是.. #fail)

3 个答案:

答案 0 :(得分:0)

在这里:

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

答案 1 :(得分: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

答案 2 :(得分:-1)

您可以使用哈希表。散列的每个位置都是散列到该术语的键的链接列表。这也将在不变的时间内进行搜索!