Compare two arrays where the values ​​do not match

Is there a quick way to do something like this Compare two arrays with the same value but with a different order in PHP?

I have arrays with potentially the same data, but in a different order, and I just need to find out if they are identical.

OK, it turns out I'm returning an object, not an array, I think ...

object(Doctrine\ORM\PersistentCollection)#560 (9) etc. 

hmm ... Would it be easiest to iterate over the contents of a collection to create your own array and then compare, as you all suggested?

Just add code for my final decision

  //Find out if container receives mediasync $toSync = array(); foreach($c->getVideosToSync() as $v) { $toSync[] = $v->getId(); } $inSync = array(); foreach($c->getVideosInSync() as $v) { $inSync[] = $v->getId(); } $noDiff = array_diff($toSync, $inSync); $sameLength = count($toSync) === count($inSync); if( empty($noDiff) && $sameLength ) { $containerHelper[$c->getId()]['syncing'] = false; } else { $containerHelper[$c->getId()]['syncing'] = true; } 
+6
source share
2 answers

Just enter them in a single order using sort() and then separate them using array_diff() .

 # Set the test data. $array1 = array(1,2,3,4,9,10,11); $array2 = array(3,4,2,6,7); # Copy the arrays into new arrays for sorting/testing. $array1_sort = $array1; $array2_sort = $array2; # Sort the arrays. sort($array1_sort); sort($array2_sort); # Diff the sorted arrays. $array_diff = array_diff($array1_sort, $array2_sort); # Check if the arrays are the same length or not. $length_diff = (count($array1) - count($array2)); $DIFFERENT_LENGTH = ($length_diff != 0) ? true : false; # Check if the arrays are different. $ARE_THEY_DIFFERENT = ($array_diff > 1) ? true : false; if ($DIFFERENT_LENGTH) { echo 'The are different in length: ' . $length_diff; } else { echo 'They have the same length.'; } echo '<br />'; if ($ARE_THEY_DIFFERENT) { echo 'They are different: ' . implode(', ', $array_diff); } else { echo 'They are not different.'; } echo '<br />'; 
-2
source

I solved it as follows:

 <?php $arrayOld=array( '1'=>'32', '2'=>'34', '3'=>'36', '4'=>'38', '5'=>'40', '6'=>'42', '7'=>'44', ); $arrayNew=array( '2'=>'32', '1'=>'34', '3'=>'36', '4'=>'38', '5'=>'46', '6'=>'42', '7'=>'44', ); /** * Here we check if there is any difference in keys or values in two arrays * array_intersect_assoc - returns values that are same in both arrays checking values as well as keys * array_diff returns the difference between the arrayNew values and those same values in both arrays, returned by array_intersect_assoc */ $result = array_diff($arrayNew,array_intersect_assoc($arrayOld, $arrayNew)); print_r($result); //result is: Array ( [2] => 32, [1] => 34, [5] => 46, ) 

/ ** We can see that the indices are different for values ​​32 and 34 * And the value of index 5 also changed from 40 to 46 * /

0
source

Source: https://habr.com/ru/post/959004/


All Articles