两个数组之间的差异

我有以下两个数组。 我想要这两个数组之间的区别。 也就是说,我怎样才能find这两个数组中不存在的值?

$array1=Array ( [0] => 64 [1] => 98 [2] => 112 [3] => 92 [4] => 92 [5] => 92 ) ; $array2=Array ( [0] => 3 [1] => 26 [2] => 38 [3] => 40 [4] => 44 [5] => 46 [6] => 48 [7] => 52 [8] => 64 [9] => 68 [10] => 70 [11] => 72 [12] => 102 [13] => 104 [14] => 106 [15] => 92 [16] => 94 [17] => 96 [18] => 98 [19] => 100 [20] => 108 [21] => 110 [22] => 112); 

注意:这个答案将返回$ array2中不存在于$ array1中的值,它不会返回$ array1中不在$ array2中的值。

 $diff = array_diff($array2, $array1); 

array_diff()

要获得两个arrays之间的区别,您需要执行以下操作:

 $fullDiff = array_merge(array_diff($array1, $array2), array_diff($array2, $array1)); 

原因是array_diff()只会给你$array1的值,而不是$array2 ,而不是相反。 以上将给你两个。

如果你想recursion地获得数组之间的区别,试试这个函数:

 function arrayDiffRecursive($firstArray, $secondArray, $reverseKey = false) { $oldKey = 'old'; $newKey = 'new'; if ($reverseKey) { $oldKey = 'new'; $newKey = 'old'; } $difference = []; foreach ($firstArray as $firstKey => $firstValue) { if (is_array($firstValue)) { if (!array_key_exists($firstKey, $secondArray) || !is_array($secondArray[$firstKey])) { $difference[$oldKey][$firstKey] = $firstValue; $difference[$newKey][$firstKey] = ''; } else { $newDiff = arrayDiffRecursive($firstValue, $secondArray[$firstKey], $reverseKey); if (!empty($newDiff)) { $difference[$oldKey][$firstKey] = $newDiff[$oldKey]; $difference[$newKey][$firstKey] = $newDiff[$newKey]; } } } else { if (!array_key_exists($firstKey, $secondArray) || $secondArray[$firstKey] != $firstValue) { $difference[$oldKey][$firstKey] = $firstValue; $difference[$newKey][$firstKey] = $secondArray[$firstKey]; } } } return $difference; } 

testing:

 $differences = array_replace_recursive( arrayDiffRecursive($firstArray, $secondArray), arrayDiffRecursive($secondArray, $firstArray, true) ); var_dump($differences); 

和array_diff?

http://php.net/array_diff

 var_dump(array_diff($array2, $array1)); 
 <?php function getArrayDiff($a1, $a2) { $result = array(); print_r($a1); print_r($a2); // If First Array is Bigger than Second if( count($a1) > count($a2) ) { $result=array_diff($a1,$a2); } // If Second Array is Bigger than First if( count($a1) < count($a2) ) { $result=array_diff($a2,$a1); } // If Both array are same but, data values are different. else { $result = array_merge (array_diff($a2,$a1), array_diff($a1,$a2)); } return $result; } print "<pre>"; // First Array is Big echo "First Array is Big <br/>"; $a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); $a2=array("e"=>"red","f"=>"green","g"=>"blue"); print_r( getArrayDiff($a1, $a2) ); // Second Array is Big echo "Second Array is Big <br/>"; $a1=array("e"=>"red","f"=>"green","g"=>"blue"); $a2=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); print_r( getArrayDiff($a1, $a2) ); // Both Array are same echo "Both Array are same <br/>"; $a1=array("a"=>"red","b"=>"green","d"=>"yellow"); $a2=array("e"=>"red","f"=>"green","g"=>"blue"); print_r( getArrayDiff($a1, $a2) ); ?> 

输出:

 First Array is Big Array ( [a] => red [b] => green [c] => blue [d] => yellow ) Array ( [e] => red [f] => green [g] => blue ) Array ( [d] => yellow ) Second Array is Big Array ( [e] => red [f] => green [g] => blue ) Array ( [a] => red [b] => green [c] => blue [d] => yellow ) Array ( [d] => yellow ) Both Array are same Array ( [a] => red [b] => green [d] => yellow ) Array ( [e] => red [f] => green [g] => blue ) Array ( [g] => blue [d] => yellow )