2010-08-17 89 views
12

我有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; 

任何巧妙的方法让这个做什么?

+0

这些数组是真正的数组,还是他们的地图?为了让我的问题更清楚,你的钥匙是0,1,2,......还是他们的话和这样的? – codersarepeople 2010-08-17 22:19:23

+0

@codersarepeople它们不是数组映射。它们是包含数字的独立单独数组。一个可以是3个值和另外10个值。只是巧合,他们都是4. – lok 2010-08-17 22:25:17

回答

28

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

看到array_diff()

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

这不会给你你期待的结果,因为'array_diff'只返回只在第一个数组中的值。查看我的答案了解更多详情。 – 2010-08-17 22:29:57

+2

这只会返回从数组1到数组2的差异,这意味着它只会显示array1中不存在于数组2中的项目。你将不得不比较两组数组。 – 2010-08-17 22:30:07

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

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

您可以根据需要向函数传递尽可能多的数组,它不仅限于两个数组。

+3

不正确 - 用你的代码,'$ diff'将是'array(40,80)'。 'array_diff'只能在一个方向上工作。查看我的答案了解更多详情。 – 2010-08-17 22:26:39

6

不从丹尼尔Vandersluis的回答减损,但要添加到它...

你要找的基本上是数组的XOR操作。为此,“merlinyoda在dorproject点网”提供了以下程序中,一个评论对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。

1

另一个好的解决是这样的:

$ ARRAY1 =阵列(10,15,20,25);

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

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