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 to share