单侧过滤,然后合并两个平坦阵列

问题描述 投票:0回答:7

我有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; }
我正在寻找的最终输出IS

$output = 20, 25, 100, 150;
完成此操作的任何整洁方法?

php arrays filter duplicates
7个回答
45
投票
其他答案在正确的轨道上,但是

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



8
投票

您要寻找的是基本上是数组的XOR操作。 为此,“ dorproject dot net的merlinyoda”在评论中提供了以下例程。

<?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。

trory遵循代码,它适用于数字,字符串和每个条件。
以下逻辑只能适用于
numbers

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

5
投票
以下逻辑对任何条件都可以正常工作。

$a1 = array('[email protected]'); $a2 = array('[email protected]', '[email protected]'); $new_array = array_merge($a1, $a2); $unique = array_unique($new_array);

在这里是执行此操作的代码。它可能可以优化,但是您会得到一个想法:

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

// $输出将为(20、25、100、150);

2
投票

手动

)函数可用于查找两个数组之间的差异:

array_diff()

您可以将任意多的数组传递到该功能,而不仅限于两个数组。

您可以使用
$array1 = array(10, 20, 40, 80); $array2 = array(10, 20, 100, 200); $diff = array_diff($array1, $array2); // $diff = array(40, 80, 100, 200);

1
投票

array_merge

这很简单,易于理解。
    

请参见
array_diff()

array_unique

-1
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.