如何检查数组是否已给定键

时间:2019-06-16 14:26:29

标签: php arrays validation

从性能的角度来看,检查关联数组是否具有且仅具有给定键集的最佳方法是什么?同样的问题,但是从代码简洁性的角度来看?

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

4 个答案:

答案 0 :(得分:1)

不确定性能,但这是一种方法。
将键与array_keys合并并计算值。
然后删除所有具有值2的值,如果还剩下一些值,则表示存在差异。

$merged = array_diff(array_count_values(array_merge($keys, array_keys($arr))), [2]);

https://3v4l.org/ATSHF

答案 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)

Just compare them

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

Try it online