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


php checking if 2 arrays contain the same values but a different order

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

这适用于整数数组如何检查如果两个索引数组有相同的值,即使顺序在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");

使用

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

使用

  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";
    

我自己找到了一个很好的解决办法。

$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 }

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

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