从2个数组中获取唯一值

时间:2010-08-17 22:17:07

标签: 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;
}

我正在寻找的最终输出是

$output = 20, 25, 100, 150;

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

7 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分: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)
}
?>

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

答案 2 :(得分:4)

这是执行此操作的代码。它可能会被优化,但你明白了:

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

答案 3 :(得分:3)

尝试下面的代码,它对于数字,字符串和所有条件都适用

以下逻辑仅适用于数字

$array1 = array(10, 15, 20, 25);
$array2 = array(10, 15, 100, 150);
$output = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));

以下逻辑适用于任何条件

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

谢谢

答案 4 :(得分:2)

另一个好的解决方案是:

  

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

     

$ array2 = array(10,15,100,150);

     

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

     

// $输出将是(20,25,100,150);

答案 5 :(得分:1)

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 :(得分:-1)

请参阅array_diff()

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