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

Gra*_*ton 18 php arrays

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

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

array('4','5','2') 
array('2','4','5')
Run Code Online (Sandbox Code Playgroud)

编辑:我可以对两个阵列进行排序并对它们进行比较,但由于我是一个懒惰的家伙,我仍然更喜欢我可以拔出并使用的单线程.

kni*_*ttl 30

array_diff看起来像一个选项:

function array_equal($a1, $a2) {
  return !array_diff($a1, $a2) && !array_diff($a2, $a1);
}
Run Code Online (Sandbox Code Playgroud)

或者作为代码中的oneliner:

if(!array_diff($a1, $a2) && !array_diff($a2, $a1)) doSomething();
Run Code Online (Sandbox Code Playgroud)

  • 你可以只使用varlibles的`empty`. (3认同)
  • Gumbo是对的.您不能将函数的返回值与`empty`一起使用.这就是他实际上说的.你必须将`array_diff`的返回值存储在temp变量中,或者只使用not运算符:`return!array_diff($ a1,$ a2)`. (3认同)

Gum*_*mbo 8

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

$a = array('4','5','2');
$b = array('2','4','5');
sort($a);
sort($b);
var_dump($a === $b);
Run Code Online (Sandbox Code Playgroud)

作为一个功能:

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)

但是它具有O(n ^ 2)的复杂性.所以你最好使用排序方法.

  • @Ngu Soon Hui - 所以将Gumbo的代码包装成一个函数(array_equals($ arr1,$ arr2))? (2认同)
  • 如果下选民评论他为什么投票给我的答案,那将会很有帮助. (2认同)