从2个数组中获取唯一值

lok*_*lok 15 php arrays

我有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;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的最终输出是

$output = 20, 25, 100, 150;
Run Code Online (Sandbox Code Playgroud)

完成这项工作的任何巧妙方法?

Dan*_*uis 36

其他答案都在正确的轨道上,但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);
Run Code Online (Sandbox Code Playgroud)


Mat*_*son 8

不要贬低Daniel Vandersluis的答案,但要加上它......

您正在寻找的基本上是阵列的XOR操作.为此,"dorproject dot net的merlinyoda"在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)
}
?>
Run Code Online (Sandbox Code Playgroud)

此函数采用不同的方法来计算XOR.


Roh*_*shi 5

尝试下面的代码,它适用于数字、字符串和每个条件

以下逻辑仅适用于数字

$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$output = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));
Run Code Online (Sandbox Code Playgroud)

以下逻辑适用于任何条件

$a1 = array('1@gmail.com'); 
$a2 = array('1@gmail.com','2@gmail.com');
$new_array=array_merge($a1,$a2);
$unique=array_unique($new_array);
Run Code Online (Sandbox Code Playgroud)

谢谢