php检查2个数组是否包含相同的值但是顺序不同

时间:2014-06-06 07:41:05

标签: php arrays

在php中有一个快速的方法来检查2个数组是否包含相同的项目,而顺序可能不同。

这适用于整数数组How to check if two indexed arrays have same values even if the order is not same in PHP?

//these must be considered equal
array(1,2,3);
array(2,1,3);
array(3,1,2);

//However it must also be possible for strings
array("foo", "bar");
array("bar", "foo");

4 个答案:

答案 0 :(得分:1)

使用此

  1. 对数组

    进行排序
    sort($arr1);
    sort($arr2);
    
  2. 通过将它们转换为字符串进行比较 - 以下任何一种方式。

    echo (implode(" ", $arr1) == implode(" ",$arr2))? "true":"false";
    /* or */
    echo (print_r($arr1,true) == print_r($arr2,true))? "true":"false";
    

答案 1 :(得分:1)

使用此

$is_equal = (count($arr1)==count($arr2)) && !count(array_diff($arr1, $arr2));

答案 2 :(得分:0)

我自己找到了一个非常好的解决方案。

$ar1 = array("hello","world","foo");//equals
$ar2 = array("world","foo","hello");//equals
$ar3 = array("hello","world","bar");//not equal

$ar4 = array();
//Add all items to a single array
$ar4 = array_merge($ar1, $ar2);//equal 
//OR
$ar4 = array_merge($ar1, $ar3);//not equal
//Remove all duplicates
//$ar4 = array_unique($ar4); edited due to comment below
$ar4 = array_flip($ar4);
//if you want to user $ar4 later flip it again, its still faster than unique
$ar4 = array_flip($ar4);

$c1 = count($ar1);// = 3
$c4 = count($ar4);// = 3 when the arrays were equal and is > 3 if not

if($c1 === $c4){ //CODE }

简而言之,这是

$ar1 = array("hello","world","foo");
$ar2 = array("world","foo","hello");
$ar4 = array_merge($ar1, $ar2);
//$ar4 = array_unique($ar4); edited due to comment below
$ar4 = array_flip($ar4); 
if(count($ar1) === count($ar4)){ //code }

答案 3 :(得分:0)

您可以对数组进行排序,然后进行比较:

function arrays_are_equal($arr1, $arr2) {
    sort($arr1);
    sort($arr2);

    return $arr1 == $arr2;
}

$arr1 = [1, 2, 3, 4];
$arr2 = [2, 3, 1, 4];

arrays_are_equal($arr1, $arr2); // true