Php 数组搜索

Php 数组搜索,php,arrays,search,multidimensional-array,Php,Arrays,Search,Multidimensional Array,假设我有以下数组: array( 'key1'=>array( 'key.1'=>'tester', 'key.2'=>'tester' ), 'key2'=>array( 'key.1'=>'failedtester', 'key.2'=>'tester' ) ) 如何搜索此数组,以便返回父键,从而使值是基于子键的特定值? e、 g.返回键,使key.1==te

假设我有以下数组:

array(
    'key1'=>array(
        'key.1'=>'tester',
        'key.2'=>'tester'
    ),
    'key2'=>array(
        'key.1'=>'failedtester',
        'key.2'=>'tester'
    )
)
如何搜索此数组,以便返回父键,从而使值是基于子键的特定值? e、 g.返回键,使key.1==tester返回键1 e、 g.返回键,使key.1==failedtester返回键2 e、 g.返回键,使key.2==tester返回arraykey1,key2 不做for循环就可以这样做吗? 编辑:使用PHP对不起,我想我说的是PHP,显然不是。。失败

给你:


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

解决方案1:两个嵌套循环,总时间复杂度为开*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:内部循环被查找替换,总复杂度为*logn。对于较大的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

什么语言?或者它真的是语言不可知论者?我猜你在使用PHP?你真的应该告诉我们你用的是什么语言…@xanatos基于用户的标签,看起来像@all-Thanks,我想。。。但我不会盲目地添加语言标签:-对此我很抱歉。我以为我加了,但显然没有。谢谢你为我添加它。我正在试图找到一个不使用剪贴的解决方案。@Aram Papazian,不管怎样,都会涉及到一个循环。没有内置的PHP函数满足您的需要,任何实现您需要的功能的函数都将使用一个循环。@simshaun,这样就可以工作了。我只是想弄清楚是否有一种不循环的方法。如果没有,那就行了。我已经创建了一个循环版本,但正在尝试寻找一个没有循环的更有效的版本。谢谢数据是否在数组中预排序?您必须使用标准多维数组来存储数据,还是可以使用不同的数据结构?
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