Получение уникальных значений из 2 массивов
У меня есть 2 массива, из которых я пытаюсь получить уникальные значения только от них. Поэтому я не просто пытаюсь удалить дубликаты, я на самом деле пытаюсь удалить оба дубликата.
Итак, если я получаю 2 массива, например:
$array1 = array();
$array2 = array();
foreach($values1 as $value1){ //output: $array1 = 10, 15, 20, 25;
$array1[] = $value1;
}
foreach($values2 as $value2){ //output: $array2 = 10, 15, 100, 150;
$array2[] = $value2;
}
Конечный результат, который я ищу, -
$output = 20, 25, 100, 150;
Какой-нибудь опрятный способ сделать это?
Ответы
Ответ 1
Другие ответы находятся на правильном пути, но array_diff
работает только в одном направлении - т.е. он возвращает значения, которые существуют в первом заданном массиве, которые не содержатся ни в каких других.
Что вы хотите сделать, так это получить разницу в обоих направлениях, а затем объединить различия:
$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$output = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));
// $output will be (20, 25, 100, 150);
Ответ 2
Не умалять ответа Даниэля Вандерслуиса, но добавить к нему...
То, что вы ищете, это в основном операция XOR массивов. С этой целью "merlinyoda at dorproject dot net" предоставил следующую процедуру в комментарии http://php.net/manual/en/function.array-diff.php:
<?php
function array_xor ($array_a, $array_b) {
$union_array = array_merge($array_a, $array_b);
$intersect_array = array_intersect($array_a, $array_b);
return array_diff($union_array, $intersect_array)
}
?>
Эта функция использует другой подход к вычислению XOR.
Ответ 3
Вот код для этого. Он может быть оптимизирован, но вы получаете идею:
$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$new_array = array();
foreach($array1 as $value) {
if(!in_array($value, $array2)) {
array_push($new_array, $value);
}
}
foreach($array2 as $value) {
if(!in_array($value, $array1)) {
array_push($new_array, $value);
}
}
print_r($new_array);
Чтобы использовать array_diff, вам нужно будет:
$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$out1 = array_diff($array1, $array2);
$out2 = array_diff($array2, $array1);
$output = array_merge($out1, $out2);
print_r($output);
Ответ 4
Другим хорошим решением является следующее:
$array1 = array (10, 15, 20, 25);
$array2 = array (10, 15, 100, 150);
$output = array_diff (array_merge ($ array1, $array2), array_intersect ($ array1, $array2));
//$output будет (20, 25, 100, 150);
Ответ 5
Функция array_diff()
(manual) может использоваться для определения разницы между двумя массивами:
$array1 = array(10, 20, 40, 80);
$array2 = array(10, 20, 100, 200);
$diff = array_diff($array1, $array2);
// $diff = array(40, 80, 100, 200);
Вы можете передать столько массивов, сколько хотите этой функции, это не ограничивается двумя массивами.
Ответ 6
см. array_diff()
$output = array_diff($array1, $array2);