– $ 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) пуст .
Самый простой способ – это решение Марка Бейкера или просто написать свою простую функцию:
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 .