Найдите разницу между двумя массивами в php

– $ arr1 —-

Array ( [0] => Array ( [id] => 1 [Name] => AAA ) [1] => Array ( [id] => 6 [Name] => BBB ) ) 

– $ arr2 —

 Array ( [0] => Array ( [id] => 1 [Name] => AAA ) [1] => Array ( [id] => 6 [Name] => BBB ) [2] => Array ( [id] => 46 [Name] => CCC ) ) 

Я хотел бы, чтобы конечный результат был следующим. Кто-нибудь может мне помочь?

–Конечный результат–

 Array ( [0] => Array ( [id] => 46 [Name] => CCC ) ) 

ОБНОВИТЬ—

В этом случае результат array_diff ($ arr1, $ arr2) пуст .

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

Самый простой способ – это решение Марка Бейкера или просто написать свою простую функцию:

Код:

 function arrdiff($a1, $a2) { $res = array(); foreach($a2 as $a) if (array_search($a, $a1) === false) $res[] = $a; return $res; } print_r(arrdiff($arr1, $arr2)); 

Вывод:

 Array ( [0] => Array ( [id] => 46 [name] => CCC ) ) 
 $arr1 = array(array('id' => 1, 'Name' => 'AAA'), array('id' => 6, 'Name' => 'BBB') ); $arr2 = array(array('id' => 1, 'Name' => 'AAA'), array('id' => 6, 'Name' => 'BBB'), array('id' => 46, 'Name' => 'CCC') ); $results = array_diff(array_map('serialize',$arr2),array_map('serialize',$arr1)); $results = array_map('unserialize',$results); var_dump($results); 

РЕДАКТИРОВАТЬ

И просто для удовольствия, вы можете использовать array_filter () вместо array_diff (), что означает отсутствие необходимости сериализовать что-либо вообще

 $results = array_filter($arr2, function ($value) use($arr1) { return !in_array($value,$arr1); } ); var_dump($results); 

Вы должны использовать array_diff() :

 $finalResult = array_diff($arr2, $arr1); 

Если вам нужно более сложное сравнение, вы можете также построить цикл foreach и использовать вот так:

 function compareItems( $a, $b){ return $a['id'] == $b['id']; // Example compare criteria } $result = array(); foreach( $arr1 as $item){ foreach( $arr2 as $key => $it){ if( !compareItems( $item, $it)){ $result[] = $it; // Either build new array unset( $arr2[$key]); // Or remove items from original array break; } } } 

И чем вы, вероятно, захотите реализовать то же самое с обратным порядком $arr1 и $arr2 .

Вы можете решить эту проблему с помощью array_udiff ()

 function arr_comp($a, $b) { if ($a['id'] == $b['id']) return 0; else if ($a['id'] > $b['id']) return 1; else return -1; } $result = array_udiff($arr2, $arr1, 'arr_comp'); 

или если вы не знаете, в каком массиве могут быть отличия, вы можете попробовать:

 $res1 = array_udiff($arr1, $arr2, 'arr_comp'); $res2 = array_udiff($arr2, $arr1, 'arr_comp'); $result = array_merge($res1, $res2); 
 $arrDif=array(); $i=0; foreach($arr1 as $value) { if(!in_array($value, $arr2)) { $arrDif[$i]=$value; $i++; } } 

Взгляните на встроенную функцию PHP array_diff . Это поможет вам 🙂 Просто передайте свои два массива и сохраните массив, возвращаемый array_diff (), который будет содержать различия между двумя массивами.

Когда вы используете многомерные массивы, посмотрите этот комментарий на веб-сайте PHP: http://www.php.net/manual/en/function.array-diff.php#98680 .