所以说我有以下数组:
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)
答案 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)
您可以使用哈希表。散列的每个位置都是散列到该术语的键的链接列表。这也将在不变的时间内进行搜索!