Php if 2 arrays contain the same values ​​but different order

Is there a quick way in php to check if 2 arrays contain the same elements, while the order may be different.

This works for integer arrays How can I check if two indexed arrays have the same values ​​even if the order is not the same as 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");

      

0


source to share


4 answers


I found a pretty nice solution.

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

      



So, in short it is

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

      

0


source


use this



  • Sort the array

    sort($arr1);
    sort($arr2);
    
          

  • Compare both by converting them to a string - in any of the following ways.

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

+1


source


use this

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

      

+1


source


Optimized version of the answer @Rohit Agrawal

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

      

0


source







All Articles