Intereting Posts
Подготовленный отчет PHP PDO: могу ли я использовать один заполнитель несколько раз? MYSQL Выберите одну и ту же таблицу отправить данныеURL в php и сохранить на сервере Larvel Cartalyst Sentinel – Добавление столбца имени пользователя в таблицу пользователей (что является правильным способом) Установите расширение Yii2 вручную без использования Composer Определите, является ли массив ассоциативным (хэш) или нет Сериализованные данные в базе данных mysql должны объединяться в массив Rijndael 256 Шифровать / расшифровывать между c # и php? Как использовать подготовленные заявления в Zend Framework PDOException «не удалось найти драйвер» в php MySQL – структура многоуровневой категории Разница в производительности PHP-фактора 30 от Linux до Windows Как настроить кеш реального пути PHP? PHP на IIS7 – получение html-страницы «Object Moved» вместо фактического перенаправления Сброс многомерных массивов в php

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

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

Related of "Получение уникальных значений из 2 массивов"

Другие ответы на правильном пути, но 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); 

Не умалять ответа Даниэля Вандерслуиса, но добавить к нему …

То, что вы ищете, это в основном операция 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.

Вот код для этого. Он может быть оптимизирован, но вы получаете идею:

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

Другим хорошим решением является следующее:

$ array1 = array (10, 15, 20, 25);

$ array2 = массив (10, 15, 100, 150);

$ output = array_diff (array_merge ($ array1, $ array2), array_intersect ($ array1, $ array2));

// $ output будет (20, 25, 100, 150);

Функция 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); 

Вы можете передать столько массивов, сколько хотите, но не ограничиваются двумя массивами.

см. array_diff ()

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