разница между двумя массивами

У меня есть два массива. Я хочу разницу между этими двумя массивами. То есть, как я могу найти значения, которые не существуют в обоих массивах?

$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); 

Solutions Collecting From Web of "разница между двумя массивами"

Примечание: этот ответ вернет значения в $ array2, которых нет в $ array1, он не вернет значения в $ array1, которые не находятся в $ array2.

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

array_diff()

Чтобы получить разницу между двумя массивами, вам необходимо сделать следующее:

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

Причина в том, что array_diff() будет давать только значения, которые находятся в $array1 но не $array2 , а не наоборот. Вышеуказанное даст вам обоим.

Если вы хотите получить разницу между массивами рекурсивно, попробуйте эту функцию:

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

Контрольная работа:

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