PHP:内置函数,用于检查两个数组值是否相等(忽略顺序)

2022-08-30 19:45:02

PHP是否有内置函数供我检查两个数组是否包含相同的值(顺序不重要?

例如,我想要一个函数,对于以下两个输入返回我为true:

array('4','5','2') 
array('2','4','5')

编辑:我本可以对这两个数组进行排序并比较它们,但是由于我是一个懒惰的人,我仍然更喜欢可以拉出并使用的单行。


答案 1

array_diff看起来像一个选项:

function array_equal($a1, $a2) {
  return !array_diff($a1, $a2) && !array_diff($a2, $a1);
}

或作为代码中的单行线:

if(!array_diff($a1, $a2) && !array_diff($a2, $a1)) doSomething();

答案 2

最好的解决方案是对这两个数组进行排序,然后比较它们:

$a = array('4','5','2');
$b = array('2','4','5');
sort($a);
sort($b);
var_dump($a === $b);

作为一项功能:

function array_equal($a, $b, $strict=false) {
    if (count($a) !== count($b)) {
        return false;
    }
    sort($a);
    sort($b);
    return ($strict && $a === $b) || $a == $b;
}

这是另一种算法,如果A的每个元素都在B中,则查找它:

function array_equal($a, $b, $strict=false) {
    if (count($a) !== count($b)) {
        return false;
    }
    foreach ($a as $val) {
        $key = array_search($val, $b, $strict);
        if ($key === false) {
            return false;
        }
        unset($b[$key]);
    }
    return true;
}

但这具有On^2)的复杂性。因此,您最好使用排序方法。