Подтвердить что ты не робот

Получение уникальных значений из 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;

Какой-нибудь опрятный способ сделать это?

4b9b3361

Ответ 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);