从性能的角度来看,检查关联数组是否具有且仅具有给定键集的最佳方法是什么?同样的问题,但是从代码简洁性的角度来看?
function checkArrKeys(array $arr, array $keys):bool {
$arrKeys=array_keys($arr);
sort($arrKeys);
sort($keys);
return $arrKeys===$keys;
}
function checkArrKeys(array $arr, array $keys):bool {
return ($cnt = count(array_intersect(array_keys($arr), $keys)))===count($arr) && $cnt===count($keys);
}
function checkArrKeys(array $arr, array $keys):bool {
return !(array_diff_key($arr, array_flip($keys)) || array_diff_key(array_flip($keys), $arr));
}
答案 0 :(得分:1)
不确定性能,但这是一种方法。
将键与array_keys合并并计算值。
然后删除所有具有值2的值,如果还剩下一些值,则表示存在差异。
$merged = array_diff(array_count_values(array_merge($keys, array_keys($arr))), [2]);
答案 1 :(得分:0)
您可以通过
function ArrayKeysAreEqual(array $keys, array $arr)
{
return array_diff(array_keys($arr), $keys) === array_diff($keys, array_keys($arr)); // return true if matches
}
答案 2 :(得分:0)
您可以在array_diff()
支票上使用count()
。
function checkArrKeys(array $arr, array $keys):bool {
return count(array_diff(array_keys($arr),$keys)) === 0 && count($keys) === count(array_keys($arr));
}
答案 3 :(得分:0)
function checkArrKeys(array $arr, array $keys):bool {
$arrayKeys = array_keys($arr);
sort($arrayKeys);
return $arrayKeys === $keys; //
}
$a = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4];
$A = ['b'=>2, 'c'=>3, 'd'=>4, 'a'=>1];
$b = ['a'=>1, 'b'=>2, 'c'=>3];
$c = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
$keys = ['a','b','c', 'd'];
var_dump(array_keys($a)===$keys); // true
var_dump(array_keys($A)===$keys); // false
var_dump(array_keys($b)===$keys); // false
var_dump(array_keys($c)===$keys); // false
function checkArrKeys(array $arr, array $keys):bool {
$arrayKeys = array_keys($arr);
sort($arrayKeys);
return $arrayKeys === $keys; //
}
echo "\n";
var_dump(checkArrKeys($a, $keys)); // true
var_dump(checkArrKeys($A, $keys)); // true
var_dump(checkArrKeys($b, $keys)); // false
var_dump(checkArrKeys($c, $keys)); // false