首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP:内置函数,用于检查两个数组的值是否相等(忽略顺序)

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

Stack Overflow用户
提问于 2009-09-10 08:42:03
回答 8查看 18.3K关注 0票数 20

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

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

代码语言:javascript
复制
array('4','5','2') 
array('2','4','5')

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-10 08:50:31

array_diff看起来像是一个选项:

代码语言:javascript
复制
function array_equal($a1, $a2) {
  return !array_diff($a1, $a2) && !array_diff($a2, $a1);
}

或者在您的代码中作为oneliner:

代码语言:javascript
复制
if(!array_diff($a1, $a2) && !array_diff($a2, $a1)) doSomething();
票数 31
EN

Stack Overflow用户

发布于 2009-09-10 08:43:42

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

代码语言:javascript
复制
$a = array('4','5','2');
$b = array('2','4','5');
sort($a);
sort($b);
var_dump($a === $b);

作为函数:

代码语言:javascript
复制
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中,则查找A的每个元素

代码语言:javascript
复制
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;
}

但其复杂度为O(n^2)。所以你最好使用排序方法。

票数 9
EN

Stack Overflow用户

发布于 2010-05-05 02:00:11

上面的array_diff()方法不起作用。

Php.net的手册上说array_diff()做到了这一点:

“返回一个数组,其中包含array1中不存在于任何其他数组中的所有条目。”

因此,实际的array_diff()方法应该是:

代码语言:javascript
复制
function array_equal($array1, $array2)
{
   $diff1 = array_diff($array1, $array2);
   $diff2 = array_diff($array2, $array1);

   return
   (
      (count($diff1) === 0) &&
      (count($diff2) === 0)
   );
}

但是,我使用排序方法:D

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1404114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档